也许是它的变态,但我想在上面的级别上合并内部流的结果。
例如,我们有一些带有数据的复杂地图:
Map<String, List<Map<String, Object>>> dataMap
我需要收集所有要列出的对象。现在,我这样做:
Set<Object> segmentIds = new HashSet<>();
dataMap.values().forEach(maps -> maps.forEach(map -> segmentIds.add(map.get("object"))));
但它并不美妙。但我无法理解如何将数据从内部循环传输到外部以最终收集它们。
是否可以在没有任何外部物体的情况下进行此操作?
答案 0 :(得分:6)
怎么样:
Set<Object> collect = dataMap.values()
.stream()
.flatMap(Collection::stream)
.map(map -> map.get("object"))
.collect(Collectors.toSet());
答案 1 :(得分:1)
您必须使用Stream-API的flatMap
。
List<Object> allObjects = dataMap.values().stream()
.flatMap(l -> l.stream())
.flatMap(m -> m.values().stream())
.collect(Collectors.toList())
代码未经过测试