大数跨境
0
0

太强!Stream 6个秘密技巧,你一定会爱上

太强!Stream 6个秘密技巧,你一定会爱上 Spring全家桶实战案例
2025-03-02
0
导读:Java Stream 6个非常强大的技巧,你一定会爱上
Spring Boot 3实战案例合集》现已囊括超过100篇精选实战文章,并且此合集承诺将永久持续更新,为您带来最新的技术与实战案例。订阅用户将特别获赠文末中所有MD文档(详尽学习笔记),以及完整的项目源码,助您在学习道路上畅通无阻。

Spring Boot 3实战案例锦集》PDF电子书现已出炉!

🎉🎉我们精心打造的《Spring Boot 3实战案例锦集》PDF电子书现已正式完成,目前已经有102个案例,后续还将继续更新。文末有电子书目录。

💪💪永久更新承诺

我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务。随着Spring相关技术的更新升级,我们的电子书也将持续更新,确保您始终掌握最前沿、最实用的技术知识。

💌💌如何获取
订阅我们的合集点我订阅,并通过私信联系我们,我们将第一时间将电子书发送给您。

现在就订阅合集




环境:SpringBoot3.4.0



1. Null?没问题!Stream.ofNullable() 来救场

拒绝NullPointerException 的发生!Java 9 的 Stream.ofNullable() 是你的新朋友。它默默地排除空值,让你远离那些臭名昭著的NPE问题。
public static void test1() {  List<String> names = Arrays.asList("Spring"null"Pack""XG"null) ;  List<String> filteredNames = names.stream()      .flatMap(Stream::ofNullable) // 👋 Bye-bye, nulls!      .collect(Collectors.toList()) ;  System.out.println(filteredNames) ; // [Spring, Pack, XG]}

无需再使用笨拙的 filter(Objects::nonNull)!。

2. 无限流?没错,你可以做到!Stream.iterate()

即时生成序列——就像变魔术一样!需要一个永不结束的偶数列表吗?Stream.iterate() 能满足你的需求。

public static void test2() {  Stream.iterate(2, n -> n + 2)    .limit(5)    .forEach(System.out::println); // 2, 4, 6, 8, 10}

非常适合模拟、游戏或动态数据生成。可能性?无限大。

3. Collectors.collectingAndThen(): 流(Stream)的瑞士军刀

使用更专业的方法对结果进行后期处理!一键计算并四舍五入平均工资:

public static record Employee(String name, Double salary) {}public static void test3() {  List<Employee> employees = List.of(        new Employee("Spring"6879.6D),        new Employee("Java", 16890D),        new Employee("XG"8983.5D),        new Employee("Pack"12983.8D)      ) ;  long averageSalary = employees.stream()      .collect(Collectors.collectingAndThen(            Collectors.averagingDouble(Employee::salary),            Math::round       ));  System.err.println("avg: " + averageSalary) ; // avg: 11434}

4. takeWhile() 和 dropWhile():精准切割你的流(Stream)

精准切割你的数据流!Java 9 的动态双人组(takeWhile 和 dropWhile)让你根据条件拆分集合:

public static void test4() {  List<Integer> numbers = List.of(12345678);    List<Integer> taken = numbers.stream()    .takeWhile(n -> n < 5)  // 抓取 [1, 2, 3, 4]      .collect(Collectors.toList());   System.err.println(taken) ;}

示例2:

public static void test4() {  List<Integer> numbers = List.of(17345678);  List<Integer> dropped = numbers.stream()        .dropWhile(n -> n < 5)        .collect(Collectors.toList());  System.err.println(dropped) ; // [7, 3, 4, 5, 6, 7, 8]}

dropWhile 方法用于丢弃流中从头开始连续满足给定条件的元素,直到遇到第一个不满足条件的元素为止,然后返回剩余元素的流。

5. Collectors.teeing():一石二鸟

同时运行两个收集器——然后合并结果!Java 12 的 teeing() 方法可同时进行2个收集。

public static void test5() {  List<Integer> numbers = List.of(45533322667823);  Map<StringOptional<Integer>> minMax = numbers.stream()      .collect(Collectors.teeing(            Collectors.maxBy(Integer::compare),  // 查找最大值            Collectors.minBy(Integer::compare),  // 查找最小值            (max, min) -> Map.of("Max", max, "Min", min)        ));   // {Min=Optional[3], Max=Optional[678]}  System.err.println(minMax) ;}

6. 综合统计

在上一个示例中通过teeing方法进行了2个收集器操作计算了最大值和最小值,如果你还需要同时计算总和与平均值,又该如何呢?如下示例轻松搞定

public static void test5() {  List<Integer> numbers = List.of(45533322667823);  LongSummaryStatistics ret = numbers.stream()      .collect(Collectors.summarizingLong(s -> s));  System.err.println(ret) ;}

通过summarizingLong方法能统计所有的信息,输出如下:

LongSummaryStatistics{count=8sum=815min=3, average=101.875000max=678}


以上是本篇文章的全部内容,如对你有帮助帮忙点赞+转发+收藏

推荐文章

高并发场景下Spring事务与JPA乐观锁重试机制导致的死锁

Sidecar模式助力Spring Cloud,实现跨语言微服务高效协同

请不要自己写!Spring Boot 一个注解搞定逻辑删除,支持JPA/MyBatis

SpringBoot+Nginx+Lua接口性能提升N倍

性能优化!3种方法优化@Transactional长事务问题,方法三性能提升4倍(不修改业务代码)

优雅!基于Spring Boot字段加密后的模糊查询,支持MyBatis, JPA

Jackson在Spring Boot高级应用技巧【Long精度丢失, @JsonValue, 数据脱敏】

性能排名第一的模板引擎 JTE 在 Spring Boot 中的应用

性能提升!@Async与CompletableFuture优雅应用

Spring Boot中记录JDBC、JPA及MyBatis执行SQL及参数的正确姿势

Map你只会用put,get?试试这些高级方法

Spring Boot 开发中有 7 件事你必须知道

【声明】内容源于网络
0
0
Spring全家桶实战案例
Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
内容 832
粉丝 0
Spring全家桶实战案例 Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
总阅读38
粉丝0
内容832