遍历Java中的HashMap

这个问题已经在这里有了答案:            >            How do I efficiently iterate over each entry in a Java Map?                                    39个
我正在尝试使用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}

我对使用这种类型的数据还比较陌生,因此我对出错的地方一无所知.我认为我的逻辑是正确的,只是不确定如何实现.
我会很乐意为您提供帮助.

目前,这行-> println(i“ pop:” pop);

一遍又一遍地输出哈希图的最后一个条目.

这是我得到的输出

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++;
  }
}

解决方法:

从您的代码中,我们可以看到您正在使用countyData.get(“ pop”)-即您已经对该密钥进行了硬编码,因此它将始终返回一个相同的东西-与该密钥关联的值.

PS:您可以使用keySet中的键来遍历地图的所有元素:

Set<KeyClass> keySet = myMap.keySet();
for(KeyClass key : keySet){
     ValueClass value = myMap.get(key);
     //do stuff
 }

您还应该注意,putAll方法将使用相同的键覆盖条目:

Copies all of the mappings from the specified map to this map (optional operation). The effect of this call is equivalent to that of calling put(k, v) on this map once for each mapping from key k to value v in the specified map

上一篇:您如何使用Android处理功能在Google Cardboard设备中显示立体图像?


下一篇:Unity3D与Android互相调用踩坑总结