Сравните два значения в 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);
}
}
и переопределить равно, чтобы проверить, равны ли два объекта.