java Stream如何操作元素

Java Stream通过中间操作(如filter、map、sorted、distinct)和终端操作(如collect、forEach、count)实现集合元素的函数式处理,不修改原数据源,每次调用需重新执行。

Java Stream 操作元素主要通过一系列中间操作和终端操作来实现。你可以把 Stream 看作是对集合元素的流水线处理工具,它不会修改原始数据源,而是生成新的结果。

筛选与过滤元素

使用 filter() 方法可以根据条件保留符合条件的元素。

例如,从整数列表中筛选出偶数:

List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List even = numbers.stream()
  .filte

r(n -> n % 2 == 0)
  .collect(Collectors.toList());

转换元素(映射)

使用 map() 可以将每个元素转换成另一种形式或提取某个属性。

比如,将字符串列表转为大写:

List words = Arrays.asList("hello", "world");
List upper = words.stream()
  .map(String::toUpperCase)
  .collect(Collectors.toList());

也可以用于提取对象字段,如从 User 列表获取所有姓名。

排序与去重

sorted() 对元素进行排序,支持自然排序或自定义比较器。

List sorted = numbers.stream()
  .sorted()
  .collect(Collectors.toList());

使用 distinct() 去除重复元素,依赖元素的 equals 方法判断唯一性。

终端操作获取结果

Stream 链式操作最后需要一个终端操作才能触发执行。常见的有:

  • collect():收集结果到集合
  • forEach():遍历每个元素并执行操作
  • count():统计元素数量
  • findFirst()anyMatch():查找或匹配元素
例如判断是否存在大于10的数:

boolean hasLarge = numbers.stream().anyMatch(n -> n > 10);

基本上就这些。Stream 让集合操作更简洁、函数式,掌握 filter、map、sorted 和 collect 就能解决大多数场景。不复杂但容易忽略的是:Stream 不会自动缓存结果,每次调用都要重新流式处理。