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

时间:2019-07-02 08:20:53

标签: java lambda java-stream

我有这张地图:

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());

我不知道如何选择keyvalue中的listMap

2 个答案:

答案 0 :(得分:6)

您需要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 :(得分:1)

另一种收集这些信息的方法可能是在Set中:

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