Как условно вставить карту в список в Java, если список еще не включает карту, содержащую пару ключ-значение - PullRequest
0 голосов
/ 05 августа 2020

У меня есть список объектов HashMap в Java. Я хотел бы условно добавить больше объектов HashMap в этот список, если список еще не содержит HashMap с той же парой ключ-значение, что и в новом HashMap.

Вот пример списка HashMap. Обратите внимание, что на самом деле ключей больше. Здесь я просто включил "contact_id" для простоты.

[{contact_id=16247115}, {contact_id=16247116}, {contact_id=16247117}, {contact_id=16247118}, {contact_id=16247119}]

Добавление {contact_id=16247117} в этот список недопустимо. Добавление {contact_id = 74857983} должно быть разрешено.

В идеале я хотел бы иметь возможность условно добавить несколько HashMap в этот список в одной строке кода. Если бы я не выполнял условную проверку, я мог бы просто использовать синтаксис listname.addAll(batchOfHashMaps). Я хотел бы сделать что-то подобное, но исключив избыточные HashMaps в списке.

Каков наиболее эффективный способ добиться этой условной вставки в Java?

Я считаю, что должно быть более эффективное решение, чем оценка каждого элемента в списке внутри for-l oop.

1 Ответ

2 голосов
/ 05 августа 2020

Если вы хотите рассматривать только одну пару "ключ-значение" карт в качестве идентификатора, вы можете использовать карту вместо списка для хранения всего. Например, карта mapOfMaps;

Затем вы можете добавить один, например:

mapOfMaps.putIfAbsent(mapToAdd.get("contact_id"), mapToAdd);

, вы можете добавить несколько, например:

batchOfHashMaps.forEach(m -> mapOfMaps.putIfAbsent(m.get("contact_id"), m));

Чтобы получить коллекцию ваших карт, просто вызовите values ​​( )

mapOfMaps.values();
...