Map <String,Map <String,String >>-使用Stream选择值键

Kun*_*Lun 1 java lambda java-stream

我有这张地图:

Map<String, Map<String, String>> listMap = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

我想KeysMapmain中选择所有与之不同的值MaplistMap.value.key

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

我不知道如何选择keyvaluelistMap

Era*_*ran 6

您需要flatMap将所有内部Maps 的所有键映射为一个键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>
Run Code Online (Sandbox Code Playgroud)