《Spring Boot 3实战案例锦集》PDF电子书现已出炉!
🎉🎉我们精心打造的《Spring Boot 3实战案例锦集》PDF电子书现已正式完成,目前已经有102个案例,后续还将继续更新。文末有电子书目录。
💪💪永久更新承诺:
我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务。随着Spring相关技术的更新升级,我们的电子书也将持续更新,确保您始终掌握最前沿、最实用的技术知识。
💌💌如何获取:
订阅我们的合集《点我订阅》,并通过私信联系我们,我们将第一时间将电子书发送给您。
环境:SpringBoot3.4.0
1. Null?没问题!Stream.ofNullable() 来救场
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(1, 2, 3, 4, 5, 6, 7, 8);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(1, 7, 3, 4, 5, 6, 7, 8);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(45, 5, 3, 33, 22, 6, 678, 23);Map<String, Optional<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(45, 5, 3, 33, 22, 6, 678, 23);LongSummaryStatistics ret = numbers.stream().collect(Collectors.summarizingLong(s -> s));System.err.println(ret) ;}
通过summarizingLong方法能统计所有的信息,输出如下:
LongSummaryStatistics{count=8, sum=815, min=3, average=101.875000, max=678}
以上是本篇文章的全部内容,如对你有帮助帮忙点赞+转发+收藏
推荐文章
高并发场景下Spring事务与JPA乐观锁重试机制导致的死锁
Sidecar模式助力Spring Cloud,实现跨语言微服务高效协同
请不要自己写!Spring Boot 一个注解搞定逻辑删除,支持JPA/MyBatis
性能优化!3种方法优化@Transactional长事务问题,方法三性能提升4倍(不修改业务代码)
优雅!基于Spring Boot字段加密后的模糊查询,支持MyBatis, JPA
Jackson在Spring Boot高级应用技巧【Long精度丢失, @JsonValue, 数据脱敏】
性能排名第一的模板引擎 JTE 在 Spring Boot 中的应用
性能提升!@Async与CompletableFuture优雅应用
Spring Boot中记录JDBC、JPA及MyBatis执行SQL及参数的正确姿势


