我正在尝试使用Processing和geoJSON创建Cholorpleth地图。我在我的HashMap
骑行时难以检查将决定多边形颜色强度的属性。
目前这是我的代码:
void draw() {
map.draw();
for (int i = 0; i < countyMarkers.size(); i++) {
Marker county = countyMarkers.get(i);
String pop = countyData.get("pop").toString();
println(i + "pop: " + pop);
}
我想要做的是遍历我的HashMap
countyData
并获取每个条目的人口。使用if语句将其与值进行比较,然后根据真实的语句为其指定颜色。
我的HashMap可以在这里看到:
{name=Carlow, pop=54,612}
{name=Cavan, pop=73,183}
{name=Clare, pop=117,196}
{name=Cork, pop=519,032}
{name=Donegal, pop=161,137}
{name=Dublin, pop=1,273,069}
{name=Galway, pop=250,541}
{name=Kerry, pop=145,502}
{name=Kildare, pop=210,312}
{name=Kilkenny, pop=95,419}
{name=Laois, pop=80,559}
{name=Letrim, pop=31,796}
{name=Limerick, pop=191,809}
{name=Longford, pop=39,000}
{name=Louth, pop=122,897}
{name=Mayo, pop=130,638}
{name=Meath, pop=184,135}
{name=Monaghan, pop=60,483}
{name=Offaly, pop=76,687}
{name=Roscommon, pop=64,065}
{name=Sligo, pop=65,393}
{name=Tipperary, pop=158,754}
{name=Waterford, pop=113,795}
{name=Westmeath, pop=86,164}
{name=Wexford, pop=145,320}
{name=Wicklow, pop=136,640}
我对使用这种类型的数据比较陌生,所以我不知道哪里出错了。我认为我的逻辑是正确的我不知道如何实现它。 我对这个问题有任何帮助表示感谢。
目前这一行 - &gt; println(i + "pop: " + pop);
一遍又一遍地输出hashmap的最后一个条目。
这是我得到的输出
0pop: 136,640
1pop: 136,640
2pop: 136,640
3pop: 136,640
4pop: 136,640
5pop: 136,640
6pop: 136,640
7pop: 136,640
8pop: 136,640
9pop: 136,640
10pop: 136,640
11pop: 136,640
12pop: 136,640
13pop: 136,640
14pop: 136,640
15pop: 136,640
16pop: 136,640
17pop: 136,640
18pop: 136,640
19pop: 136,640
20pop: 136,640
21pop: 136,640
22pop: 136,640
23pop: 136,640
24pop: 136,640
25pop: 136,640
我使用此方法填充HashMap
。
void getCountyDetails(List<Marker>m) {
countyData = new HashMap();
for (Marker county: countyMarkers) {
countyData.putAll(county.getProperties());
println(countyData);
}
}
此处修改了代码
Set<String> keySet = countyData.keySet();
for(String pop : keySet){
String value = countyData.get(pop).toString();
println("population:" + value);
}
现在输出:
population:Wicklow
population:136,640
population:Wicklow
population:136,640
population:Wicklow
population:136,640
population:Wicklow
population:136,640
population:Wicklow
population:136,640
population:Wicklow
population:136,640
population:Wicklow
population:136,640
population:Wicklow
population:136,640
population:Wicklow
population:136,640
它似乎仍然没有遍历HashMap
填充HashMap
void getCountyDetails(List<Marker>m) {
countyData = new HashMap();
int i = 0;
for (Marker county: countyMarkers) {
countyData.put(i,county.getProperties());
i++;
}
}
答案 0 :(得分:2)
从您的代码中我们可以看到您正在使用countyData.get("pop")
- 即您已对key
进行了硬编码,因此它将始终返回同一个内容 - 与此关联的value
key
。
PS:您可以使用keySet
中的键来迭代地图的所有元素:
Set<KeyClass> keySet = myMap.keySet();
for(KeyClass key : keySet){
ValueClass value = myMap.get(key);
//do stuff
}
另外,您应该注意putAll
方法将使用相同的密钥覆盖条目:
将指定地图中的所有映射复制到此地图(可选操作)。对于在指定地图中从键k到值v的每个映射,此调用的效果等同于在此映射上调用put(k,v)的效果
答案 1 :(得分:1)
for (Map.Entry<String, Integer> countyMarkers: map.entrySet())
{
System.out.println(countyMarkers.getKey() + " " + countyMarkers.getValue());
}
这里我使用了entrySet()方法,该方法返回此映射中包含的映射的Set视图,然后通过这些映射,您可以使用getKey()和getValue()方法获取键和值
答案 2 :(得分:0)
问题是:
String pop = countyData.get("pop").toString();
你硬编码获得“pop”的关键
你可能想要: String pop = countyData.get(county).toString();