карта> - Выберите ключ значения, используя Stream - PullRequest
1 голос
/ 02 июля 2019

У меня есть эта карта:

Map<String, Map<String, String>> listMap = new HashMap<>();

Я хочу выбрать все отдельные Keys из Map, которые являются значениями в основном Map: listMap.value.key

List<String> distinct = listMap.entrySet().stream()
                                .map(e -> e.getValue()) //Map<String, String>
                                //Select key of value
                                .distinct().collect(Collectors.toList());

Я не знаю, как выбрать key из value из listMap.

Ответы [ 2 ]

6 голосов
/ 02 июля 2019

Вам нужно flatMap, чтобы сопоставить все ключи всех внутренних Map с одним Stream:

List<String> distinct = 
    listMap.values() // Collection<Map<String,String>>
           .stream() // Stream<Map<String,String>>
           .flatMap(map -> map.keySet().stream()) // Stream<String>
           .distinct() // Stream<String>
           .collect(Collectors.toList()); // List<String>
1 голос
/ 02 июля 2019

Альтернативный способ их сбора может быть в Set как:

Set<String> distinct = new LinkedHashSet<>(); // for a predictable order
listMap.values().forEach(e -> distinct.addAll(e.keySet()));
...