2014-02-19 39 views
-1

我有一个JSONarray的for循环,我将这些值添加到LinkedHashMap。我想避免添加相同的值。我不知道该怎么做。比较LinkedHashMap中的两个值,以避免添加相同的值

for (int l = 0; l <stops_summaries2.length(); l++){ 

JSONObject stopObject2 = stops_summaries2.getJSONObject(l); 
String stopid2 = stopObject2.getString("id"); 
System.out.println("stopid2 --->" + stopid2); 
String stopurl2 = stopObject2.getString("url"); 
System.out.println("stopurl2 --->" + stopurl2); 
String stopname2 = stopObject2.getString("name"); 
System.out.println("stopname2 --->" + stopname2); 

LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>(); 

    map.put(TAG_NAME, stopname2); 
    map.put(TAG_SHORT, id); 
    map.put(TAG_COLOR, stopid2); 
    itemList.add(map); 
} 
+0

但是HashMap中的所有键都是唯一的。如果你用现有的键来放置某些东西,旧值将会被新值覆盖。你想避免这种情况吗? – nikis

+0

这是在android中的列表视图。由于链接的星图,我在每行显示一个键/值对。数组中的某些值是相同的,我只想在列表视图中显示其中的一个值。 – Xavier

+0

你的意思是说'itemList.add(map)'不应该完成,如果已经添加了一个等效的地图?然后将itemList声明为Set。 –

回答

0

可以使用的功能containsKey(key)containsValue(values)检查,如果地图包含某个键或值。

编辑:我现在看到你在每次迭代中创建一个新的Map,你真正想做什么?该映射在for循环之外将不可用。我认为你需要在for循环之前声明Map,然后添加到它。

编辑:在我的答案纠正一个错误,

+0

但他有stops_summaries2.length()不同的地图 – Blackbelt

+0

我想避免不同的值。 – Xavier

0

在我看来,你应该避免在每次迭代创建一个不同的地图,并使用它像你的数据的容器。你可以有一个包装类:

public class Item { 

    String name; 
    String id; 
    String url; 

    public Item(String nane, String id, String url) { 
    this.name = name; 
    this.id = id; 
    this.url = url; 
    } 

    @Override 
    public boolean equals(Object other){ 
    if (!(other instanceof Item)) return false; 
     return id.equals(((Item)other).id); 
    } 

} 

和覆盖等于检查两个对象是否相等。