颠覆认知!这些你可能从未听说过,但会瞬间爱上的 Java Stream 黑魔法!

82 阅读2分钟

点击上方“程序员蜗牛g”,选择“设为星标”跟蜗牛哥一起,每天进步一点点程序员蜗牛g大厂程序员一枚 跟蜗牛一起 每天进步一点点31篇原创内容**公众号

今天,我们将带你探索 Java Stream API 中一些极具魔力的用法,让你的代码更简洁、更高效,同时避免常见的陷阱。

Stream.ofNullable():告别 NullPointerException

不再为 null 头疼!

Java 9 引入了 Stream.ofNullable(),它可以自动忽略 null 值,避免 NullPointerException

import java.util.*;import java.util.stream.*;
public class StreamDemo {    public static void main(String[] args) {        List<String> names = Arrays.asList("Alice"null"Bob""Charlie"null);        List<String> filteredNames = names.stream()            .flatMap(Stream::ofNullable)  // 直接跳过 null            .collect(Collectors.toList());
        System.out.println(filteredNames); // [Alice, Bob, Charlie]    }}

相比 filter(Objects::nonNull),这种方式更优雅、简洁,Java 直接帮你搞定 null 处理!

Stream.iterate():无限流?当然可以!

动态生成数据流,简直像魔法一样!

如果你需要一个永不终止的偶数序列,只需 Stream.iterate()

Stream.iterate(2, n -> n + 2)
    .limit(5)  // 只取前 5 个
    .forEach(System.out::println); // 2, 4, 6, 8, 10

这个方法非常适用于游戏模拟、数据填充、动态列表等场景。

Collectors.collectingAndThen():流式处理的万能工具

在 collect() 后再进行额外处理,让数据转换更顺滑!

比如计算平均工资并四舍五入:

long averageSalary = employees.stream()
    .collect(Collectors.collectingAndThen(
        Collectors.averagingDouble(Employee::getSalary),
        Math::round // 💡 一步到位
    ));

不需要写额外代码,一个流式操作就能完成计算和转换。

takeWhile() & dropWhile():精准裁剪数据流

用 Java 9 提供的 takeWhile() 和 dropWhile() 轻松截取集合。

List<Integer> numbers =List.of(1,2,3,4,5,6,7,8);
List<Integer> taken = numbers.stream()
    .takeWhile(n -> n <5)// 取出小于 5 的部分
    .collect(Collectors.toList());
List<Integer> dropped = numbers.stream()
    .dropWhile(n -> n <5)// 丢弃小于 5 的部分
    .collect(Collectors.toList());

这在分页处理、批量数据处理、数据分片等场景下尤为实用!

Collectors.teeing():一箭双雕,合并两个收集器结果

Java 12 的 Collectors.teeing() 允许同时执行两个 collect() 操作,并合并结果。

图片

输出示例:

{Max=Optional[8], Min=Optional[1]}

这种方式适用于并行计算、数据统计等场景,避免了额外的 stream() 处理,让代码更加简洁高效!

这些 Java Stream 黑魔法,你学会了吗?赶快在你的项目中实践一下,让你的代码更加简洁高效吧!

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。

关注公众号:woniuxgg,在公众号中回复:笔记  就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!