Как получить конкретное c значение из ArrayList в POJO в java - PullRequest
0 голосов
/ 27 мая 2020
Key : 22 Value: Abey
Key : 22 Value : Dawn
Key : 22 Value : Sherry
Key : 22 Value : Sherry
Key : 22 Value : Sherry

Я хочу печатать только ключи с Шерри, как это сделать, используя Java?

Изменение заголовка вопроса, потому что HashMap не хранит повторяющиеся ключи

Ответы [ 5 ]

1 голос
/ 27 мая 2020

Вы можете использовать метод ниже из JDK1.8 и выше для выполнения задачи.

List<Integer> keys = hashMap.entrySet().stream()
            .filter((entry) -> entry.getValue().equals("Sherry"))
            .map(entry -> entry.getKey())
            .collect(Collectors.toList());
1 голос
/ 27 мая 2020

HashMap не принимает повторяющиеся ключи. Только повторяющиеся значения. В вашем подходе вы не можете хранить все записи, как вы показываете. например:

Map<Integer, String> map = new HashMap<>();
map.put(22, "Abey");
map.put(22, "Dawn");
map.put(22, "Sherry");
map.put(22, "Sherry");
map.put(22, "Sherry");

, когда вы распечатываете вывод HashMap. Вы получаете только один вывод, потому что тот же ключ заменит последнее значение.

вывод:

{22=Sherry}

Если вы действительно хотите хранить повторяющиеся ключи, узнайте больше о том, как хранить повторяющиеся ключи в HashMap.

0 голосов
/ 27 мая 2020

Может быть, вы можете использовать обратную карту, имея Шерри, Доун и Абей в качестве ключей и 22 в качестве значения списка. У вас может быть что-то вроде:

Map<String , Set<String> > reverseMap;

Теперь вы можете сохранить ключи, например, 22 * ​​1005 * в наборе, и иметь ключ этой карты в качестве имени.

0 голосов
/ 27 мая 2020

Вы можете использовать следующий код.

static < K, V > List < K > getAllKeysForValue(Map < K, V > mapOfWords, V value) {
    List < K > listOfKeys = null;
    //Check if Map contains the given value
    if (mapOfWords.containsValue(value)) {
        // Create an Empty List
        listOfKeys = new ArrayList < > ();
        // Iterate over each entry of map using entrySet
        for (Map.Entry < K, V > entry: mapOfWords.entrySet()) {
            // Check if value matches with given value
            if (entry.getValue().equals(value)) {
                // Store the key from entry to the list
                listOfKeys.add(entry.getKey());
            }
        }
    }
    // Return the list of keys whose value matches with given value.
    return listOfKeys;
}
0 голосов
/ 27 мая 2020

Думаю нужно l oop через карту. Для этого не существует специальной c функции

map.forEach((k,val) -> {
  if (val.equals("Sherry") {
    keys.add(k);
  }
});

, где map - это HashMap, а ключи - это список

...