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
,因此,试图保留订单是没有意义的。