Java中Lambda表达式通过Stream.concat()或flatMap()实现数据流合并:concat适用于两流合并,flatMap适合多层嵌套列表拍平;合并后可链式调用distinct、map、collect等操作去重、转换或聚合,Lambda常用于分类器、字段提取等函数式逻辑。
Java 中 Lambda 表达式本身不直接“合并数据流”,而是配合 Stream API 实现高效、声明式的流合并操作。核心在于用 Stream.concat() 或 flatMap() 配合 Lambda 作为函数参数,完成多源数据的整合。
适用于明确知道要合并的两个集合,语法直观、语义清晰。
Stream.concat(stream1, stream2),传入两个已有的 StreamforEach(System.out::println) 或 map(x -> x.toUpperCase())
concat() 只接受两个参数;多个流需嵌套调用或改用其他方式适合处理 List<List<T>>、接口返回的多个结果列表等场景,是更通用的合并方案。
Stream.of(list1, list2, list3).flatMap(List::stream) —— 把多个 List 封装成流,再逐个展开nestedLists.stream().flatMap(List::stream) —— 直接拍平二维结构List::stream 方法引用中,本质仍是函数式表达单纯合并只是第一步,实际开发中常需进一步加工。
立即学习“Java免费学习笔记(深入)”;
.distinct(),要求元素类型正确实现 equals() 和 hashCode()
Collectors.toMap() + Function.identity() 保留首个.collect(Collectors.toList()) 或 .collect(Collectors.toSet())
这不是简单拼接,而是关联合并,需先分组再聚合,Lambda 主要用于分类逻辑和构造新对象。
Collectors.groupingBy(e -> e.getProvinceId()) 对各接口数据分别分组Map.merge() 或 Stream.concat().collect(...) 合并同 key 的数据e -> new Result(e.field1, e.field4))等位置