我有这张地图:
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
。
答案 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()));