Сравните два значения в LinkedHashMap, чтобы избежать добавления одинаковых значений

У меня есть цикл из JSONarray и я добавляю значения в 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);
}

2 ответа

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

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

Изменить: исправил ошибку в моем ответе,

На мой взгляд, вам следует избегать создания разных карт на каждой итерации и использовать их как контейнер для ваших данных. Вы можете иметь класс оболочки:

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

}

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

Другие вопросы по тегам