Java 8流将内部流结果合并到

时间:2017-03-16 15:54:04

标签: java java-8 java-stream

也许是它的变态,但我想在上面的级别上合并内部流的结果。

例如,我们有一些带有数据的复杂地图:

Map<String, List<Map<String, Object>>> dataMap

我需要收集所有要列出的对象。现在,我这样做:

Set<Object> segmentIds = new HashSet<>();
dataMap.values().forEach(maps -> maps.forEach(map -> segmentIds.add(map.get("object"))));

但它并不美妙。但我无法理解如何将数据从内部循环传输到外部以最终收集它们。

是否可以在没有任何外部物体的情况下进行此操作?

2 个答案:

答案 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())

代码未经过测试