Java 地图<;字符串,Map<;字符串,字符串>>;-使用流选择值的键

Java 地图<;字符串,Map<;字符串,字符串>>;-使用流选择值的键,java,lambda,java-stream,Java,Lambda,Java Stream,我有这张地图: Map<String, Map<String, String>> listMap = new HashMap<>(); 我不知道如何选择的键或值或列表映射您需要平面映射,以便将所有内部映射的所有键映射到单个流: List<String> distinct = listMap.values() // Collection<Map<String,String>> .stream(

我有这张地图:

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

我不知道如何选择
列表映射

您需要
平面映射
,以便将所有内部
映射
的所有键映射到单个

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>
List distinct=
listMap.values()//集合
.stream()//流
.flatMap(map->map.keySet().stream())//流
.distinct()//流
.collect(Collectors.toList());//列表

您需要
flatMap
将所有内部
map
s的所有键映射到单个
流中

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>
List distinct=
listMap.values()//集合
.stream()//流
.flatMap(map->map.keySet().stream())//流
.distinct()//流
.collect(Collectors.toList());//列表

收集这些信息的另一种方法可以是将
设置为:

Set<String> distinct = new LinkedHashSet<>(); // for a predictable order
listMap.values().forEach(e -> distinct.addAll(e.keySet()));
Set distinct=new LinkedHashSet();//为了一个可预测的秩序
listMap.values().forEach(e->distinct.addAll(e.keySet());

收集这些信息的另一种方法可以是将
设置为:

Set<String> distinct = new LinkedHashSet<>(); // for a predictable order
listMap.values().forEach(e -> distinct.addAll(e.keySet()));
Set distinct=new LinkedHashSet();//为了一个可预测的秩序
listMap.values().forEach(e->distinct.addAll(e.keySet());

.flatMap(e->e.getValue().keySet().stream())
如果我没有错,那么你的目标是什么->修改@Eran的答案,并将
.filter(listMap::containsKey)
放在collect操作符前面。
.flatMap(e->e.getValue().keySet().stream())
如果我没有错,那么你的目标是->修改@Eran的答案,并将
.filter(listMap::containsKey)
放在collect操作符前面。根据OP,源是一个
HashMap
,因此没有必要尝试保留顺序。根据OP,源是一个
HashMap
,因此,试图保留订单是没有意义的。