在java 8 stream表达式中实现if/else逻辑
2023-09-11 14:14:32 时间
简介
在Stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢?
还记得我们在上一篇文章lambda最佳实践中提到,lambda表达式应该越简洁越好,不要在其中写臃肿的业务逻辑。
接下来我们看一个具体的例子。
传统写法
假如我们有一个1 to 10的list,我们想要分别挑选出奇数和偶数出来,传统的写法,我们会这样使用:
public void inForEach(){
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
ints.stream()
.forEach(i -> {
if (i.intValue() % 2 == 0) {
System.out.println("i is even");
} else {
System.out.println("i is old");
}
});
}
上面的例子中,我们把if/else的逻辑放到了forEach中,虽然没有任何问题,但是代码显得非常臃肿。
接下来看看怎么对其进行改写。
使用filter
我们可以把if/else的逻辑改写为两个filter:
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Stream<Integer> evenIntegers = ints.stream()
.filter(i -> i.intValue() % 2 == 0);
Stream<Integer> oddIntegers = ints.stream()
.filter(i -> i.intValue() % 2 != 0);
有了这两个filter,再在filter过后的stream中使用for each:
evenIntegers.forEach(i -> System.out.println("i is even"));
oddIntegers.forEach(i -> System.out.println("i is old"));
怎么样,代码是不是非常简洁明了。
总结
lambda表达式需要尽可能的简洁,我们可以用stream的filter来替代if/else业务逻辑。
本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/lambda-if-else
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问 www.flydean.com
相关文章
- java错误:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Bu
- Java实现 LeetCode 780 到达终点(逻辑题)
- Java实现 LeetCode 410 分割数组的最大值
- java实现逻辑推断
- Java实现 蓝桥杯VIP 算法提高 乘法运算
- Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
- Java通过mysql-connector-java-8.0.11连接MySQL Server 8.0遇到的几个问题
- 【JAVA】java中split以"." 、""、“|”分隔字符串
- 【JAVA】Java 异常中e的getMessage()和toString()方法的异同
- 【JAVA】Java 异常中e的getMessage()和toString()方法的异同
- 【JAVA】毕向东Java基础视频教程-笔记
- Java超类-java.lang.object
- Java快速排序的调试
- Atitit java播放器调音速率快慢的实现 目录 1.1. 原理 本质上是改变采样率即可1 2. 使用Java增加/降低AudioInputStream的音频播放速度(Increase/dec
- Java — java.lang.NullPointerException - 如何处理空指针异常
- 【java】Java生成微信小程序二维码
- Simple Logging Facade for Java (SLF4J)作用(java日志框架)
- 【java】Java连接mysql数据库及mysql驱动jar包下载和使用
- Java 关于java.util.LinkedHashMap cannot be cast to 实体类问题答案
- 详解jvm之java类加载机制和类加载器(ClassLoader) 深入理解Java类加载器(ClassLoader) 如何自定义类加载器 深入说明双亲委派 双亲委派模型的破坏者-线程上下文类加载器
- 一文详解java线程池 详解Java线程池的七个参数 详解池化技术 java如何选择核心线程数 详解Java线程池的拒绝策略
- Java 异常解决之java.lang.IllegalArgumentException: Comparison method violates its general contract!
- 每个Java程序员需要了解的8个Java开发工具
- java-信息安全(十二)-数字证书、CA证书【Java证书体系实现】
- JAVA语言之Java 中不同的并行实现的性能比较
- java 单例模式5种写法
- 【java】Java 集合框架
- 【java】Java 内存模型