2014-02-19 43 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); 
    } 

} 

和覆蓋等於檢查兩個對象是否相等。