Streams 中级

使用 flatMapping() 在分组收集器内部进行扁平化。

✕ Java 8
// Flatten within a grouping collector
// Required complex custom collector
Map<String, Set<String>> tagsByDept =
    // no clean way in Java 8
✓ Java 9+
var tagsByDept = employees.stream()
    .collect(groupingBy(
        Emp::dept,
        flatMapping(
            e -> e.tags().stream(),
            toSet()
        )
    ));
发现此代码有问题? 告诉我们。
🧩

可组合

作为 groupingBy 内的下游收集器使用。

📏

更扁平

避免嵌套的 stream-inside-collector 模式。

📖

表达性强

flatMapping 的意图一目了然。

旧方式
嵌套 flatMap
现代方式
flatMapping()
自 JDK
9
难度
中级
Collectors.flatMapping()
可用

自 JDK 9 起广泛可用(2017 年 9 月)

Collectors.flatMapping() 在 groupingBy 等收集器内部将一对多映射作为下游收集器应用。这避免了 groupingBy 和 flatMap 的笨拙嵌套。

分享 𝕏 🦋 in