Как удалить дубликаты в связанной HashMap? - PullRequest
1 голос
/ 17 июня 2020

Я создаю Linked HashMap, который будет читать строку и целое число из вводимых пользователем данных. Он настроен так:

LinkedHashMap<String, Integer> wordIndex = new LinkedHashMap<String, Integer>();

Моя цель - удалить любые дубликаты, которые может ввести пользователь. Вот пример:

wordIndex.put("The", 0);
wordIndex.put("Hello", 6);
wordIndex.put("Katherine", 17);
wordIndex.put("Hello", 21);

Я хочу сохранить первое «Hello» и удалить второе.

Я впервые использую Linked HashMaps, и поэтому я не знаком со встроенными функциями, которые находятся в моем распоряжении. Есть ли функция для HashMaps, которая может позволить мне проверять wordIndex HashMap один за другим, чтобы искать дубликаты каждый раз, когда вводится новое значение и ключ? Если нет, то какой процесс я могу использовать для индивидуальной проверки дубликатов? Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вы сказали:

Я хочу сохранить первое «Hello» и удалить второе.

Чтобы вторая попытка ввода не перезаписала первую запись в Map используйте Map::putIfAbsent в Java 8 и новее.

Map<String, Integer> wordIndex = new LinkedHashMap<>();
wordIndex.putIfAbsent("The", 0);
wordIndex.putIfAbsent("Hello", 6);
wordIndex.putIfAbsent("Katherine", 17);
wordIndex.putIfAbsent("Hello", 21);

wordIndex.entrySet().forEach(System.out::println);

Печатает

The=0
Hello=6
Katherine=17

Map.putIfAbsent будет только первые введенные значения будут сохранены. Мы видим, что первая запись ("Hello", 6) сохранилась, а вторая попытка входа ("Hello", 21) не удалась и была отброшена.

2 голосов
/ 17 июня 2020

Поведение по умолчанию будет Override существующее значение с существующим key, поэтому в LinkedHashMap есть следующие значения

{The=0, Hello=21, Katherine=17}

, и вы можете проверить, существует ли key используя containsKey()

if (wordIndex.containsKey("Hello")) {
    // do something        
}
...