在java 8 stream表达式中实现if/else逻辑
2023-09-11 14:19:26 时间
简介
在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
欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问 www.flydean.com
相关文章
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
- cpu个数、核数、线程数、Java多线程关系的理解+物理cpu数和cpu核数和逻辑cpu数和vcpu区别
- java Swing GUI 入门-切换布局
- Java核心技术卷I基础知识3.3.1 整型
- Java核心技术卷I基础知识3.6.6 码点与代码单元
- Java 7与伪共享的新仇旧恨
- Java Invoked OOM-Killer - OOM不一定是来自于java heap
- 阿里 P8 每天熬夜到凌晨的Java手册
- 最新秋招,Java八股文!含答案,JAVA核心知识点最详细版(面试必备)
- Java - CentOS下JDK的安装教程(及JAVA_HOME配置、以jdk1.8为例)
- 第七节:详细讲解Java中的日期,java.util.date
- Java简介超详细整理,适合新手入门
- 【HarmonyOS】【JAVA UI】 鸿蒙 Webview怎么设置cookie和读取cookie
- Java 设计模式之桥接模式,Java 桥接模式 ,java Bridge Pattern
- java 两种进程创建方式比较
- java的反射机制相关方法(未完)
- Java_类似java.lang.VerifyError: Expecting a stackmap frame at branch target 22 in method的解决方法
- 【JAVA】【NIO】10、Java NIO ServerSocketChannel
- 实操代码研究各种Java技术-java.toutiao.im
- 逻辑回归的相关问题及java实现
- Java数据结构和算法day01 稀疏数组与队列
- 从零学Java(21)之while 语句,小AD竟然想躺着上王者!