如何在java 8 stream表达式实现if/else逻辑

网友投稿 504 2022-12-08


如何在java 8 stream表达式实现if/else逻辑

简介

在Stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢?

还记得我们在上一篇文章lambda最佳实践中提到,lambda表达式应该越简洁越好,不要在其中写臃肿的业务逻辑。

接下来我们看一个具体的例子。

传统写法

假如我们有一个1 to 10的list,我们想要分别挑选出奇数和偶数出来,传统的写法,我们会这样使用:

public void inForEach(){

List 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 ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

Stream evenIntegers = ints.stream()

.filter(i -> i.intValue() % 2 == 0);

Stream 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("McQvgoi is old"));

怎么样,代码是不是非常简洁明了。

总结

lambda表达式需要尽可能的简洁,我们可以用stream的filter来替代if/else业务逻辑。

本文的例子https://github.com/ddean2009/learn-java-streams/tree/master/lambda-if-else


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java实现邮件发送
下一篇:Java SSM框架如何配置静态资源加载
相关文章

 发表评论

暂时没有评论,来抢沙发吧~