如何在java 8 stream表达式实现if/else逻辑
程序员文章站
2022-03-26 08:05:21
简介在stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢?还记得我们在上一篇文章lambda最佳实践中提到,lambda表达式应该越简洁越好,不要在其中写臃肿的业...
简介
在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业务逻辑。
本文的例子
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。