一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Java 中 Lambda 表达式如何进行数据流合并操作

时间:2026-07-11 09:30:52 编辑:袖梨 来源:一聚教程网

Java中Lambda表达式通过Stream.concat()或flatMap()实现数据流合并:concat适用于两流合并,flatMap适合多层嵌套列表拍平;合并后可链式调用distinct、map、collect等操作去重、转换或聚合,Lambda常用于分类器、字段提取等函数式逻辑。

Java 中 Lambda 表达式本身不直接“合并数据流”,而是配合 Stream API 实现高效、声明式的流合并操作。核心在于用 Stream.concat()flatMap() 配合 Lambda 作为函数参数,完成多源数据的整合。

合并两个 List 流:用 Stream.concat()

适用于明确知道要合并的两个集合,语法直观、语义清晰。

  • 调用 Stream.concat(stream1, stream2),传入两个已有的 Stream
  • Lambda 常用于后续处理,比如 forEach(System.out::println)map(x -> x.toUpperCase())
  • 注意:concat() 只接受两个参数;多个流需嵌套调用或改用其他方式

合并多个嵌套或动态 List:用 flatMap()

适合处理 List<List<T>>、接口返回的多个结果列表等场景,是更通用的合并方案。

  • Stream.of(list1, list2, list3).flatMap(List::stream) —— 把多个 List 封装成流,再逐个展开
  • nestedLists.stream().flatMap(List::stream) —— 直接拍平二维结构
  • Lambda 在这里隐含在 List::stream 方法引用中,本质仍是函数式表达

合并后去重或转换:结合 distinct / map / collect

单纯合并只是第一步,实际开发中常需进一步加工。

立即学习“Java免费学习笔记(深入)”;

  • 去重:链式调用 .distinct(),要求元素类型正确实现 equals()hashCode()
  • 按字段去重(如 name):用 Collectors.toMap() + Function.identity() 保留首个
  • 转为新集合:.collect(Collectors.toList()).collect(Collectors.toSet())

对象数据跨源合并(如按 provinceId 聚合)

这不是简单拼接,而是关联合并,需先分组再聚合,Lambda 主要用于分类逻辑和构造新对象。

  • Collectors.groupingBy(e -> e.getProvinceId()) 对各接口数据分别分组
  • 再用 Map.merge()Stream.concat().collect(...) 合并同 key 的数据
  • Lambda 出现在 groupingBy 的分类器、map 中的字段提取(如 e -> new Result(e.field1, e.field4))等位置

热门栏目