Как получить набор из HashMap в HashMap - PullRequest
1 голос
/ 01 февраля 2020

Я пытаюсь создать Набор и Коллекцию из HashMap, который находится в другом HashMap. Проблема в том, что метод getKey() не применим.

HashMap<HashMap<String, String>, String> list = getList(issues);
Set <String> set1 = list.getKey().keySet();
Collection <String> set2 = list.getKey().values();

Ответы [ 2 ]

2 голосов
/ 01 февраля 2020

Из вашей коллекции, чтобы получить все ключи каждой записи, вы должны l oop над каждой записью и получить ключи, для этого с помощью Java -8 + вы можете использовать:

Set<String> allKeys = list.entrySet().stream() 
        .flatMap(e -> e.getKey().keySet().stream())
        .collect(Collectors.toSet());

Чтобы получить значение, вы можете сделать это так:

List<String> allValues = list.entrySet().stream()
        .flatMap(e -> e.getKey().values().stream())
        .collect(Collectors.toList());
1 голос
/ 01 февраля 2020

Получить ключи

//Get Keys of childHashMap
Set<String> keys = parent.keySet().stream().
flatMap(child -> child.keySet().stream()).
collect(Collectors.toSet());

1. Поток на keySet родительского hashMap (итерировать по дочернему хэш-карте)

  • parent.keySet().stream()

2.Возврат keySet дочернего хеш-карты (это похоже на {1},{2,3},{4,5})

  • child -> child.keySet().stream()

3.Запустите предыдущий шаг Установить (это как преобразовать {1},{2,3},{4,5} в {1,2,3,4,5})

  • flatMap(child -> child.keySet().stream()).

4. Клавиши возврата

  • collect(Collectors.toSet());

Получить значения

//Get Values of childHashMap
Collection<String> values = parent.keySet().stream()
.map(HashMap::values)
.flatMap(Collection::stream)
.collect(Collectors.toList());

1.Stream keySet родительского hashMap (итерировать по дочернему хэш-карте)

  • parent.keySet().stream()

2. Возвращаемые значения дочерней хэш-карты (например: {1},{2},{3})

  • map(HashMap::values)

3.Использование flatMap для выравнивания предыдущего шага (Преобразование {1},{2},{3} в {1,2,3})

  • flatMap(Collection::stream)

4.Сбор значений в список

  • collect(Collectors.toList())

Образец

  //Parent
  HashMap<HashMap<String, String>, String> parent = new HashMap<>();

        //Child HashMap 1
        HashMap<String, String> childHashMap = new HashMap<>();
        childHashMap.put("a", "b");

        //Child HashMap2
        HashMap<String, String> childHashMap2 = new HashMap<>();
        childHashMap2.put("d", "e");

        //Parent init
        parent.put(childHashMap, "c");
        parent.put(childHashMap2, "f");

        //Get Keys
        Set<String> keys = parent.keySet().stream().flatMap(child -> child.keySet().stream()).collect(Collectors.toSet());

        //Get values
        Collection<String> values = parent.keySet().stream().map(HashMap::values).flatMap(Collection::stream).collect(Collectors.toList());

        //Print key and values
        keys.forEach(System.out::println);
        values.forEach(System.out::println);

Результат =

keys = a ,d

значения = e , b

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...