2014-02-19 2 views
-1

У меня есть цикл for из JSONarray, и я добавляю значения в 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. Я показываю в каждой строке пару ключ/значение благодаря связаннойhashmap. Некоторые значения в массиве идентичны, и я хочу отобразить только один из них в представлении списка. – Xavier

+0

Вы имеете в виду, что 'itemList.add (map)' не следует делать, если эквивалентная карта уже добавлена? Затем объявите itemList как набор. –

ответ

0

Вы можете использовать функции containsKey(key) и containsValue(values), чтобы проверить, если карта содержит определенный ключ или значение.

Редактировать: Теперь я вижу, что вы создаете новую карту на каждой итерации, действительно ли это то, что вы хотите сделать? Эта карта не будет доступна вне цикла for. Я думаю, вам нужно объявить карту перед циклом for, а затем добавить к ней.

Edit: исправлена ​​ошибка в моем ответе,

+0

, но у него есть остановки_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); 
    } 

} 

и override равно, чтобы проверить, равны ли два объекта.

Смежные вопросы