时间:2021-05-19
简介
在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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java8新特性系列我们已经介绍了Stream、Lambda表达式、DateTime日期时间处理,最后以“NullPointerException”的克星Opt
什么是Lambda表达式,java8为什么使用Lambda表达式?“Lambda表达式”(lambdaexpression)是一个匿名函数,Lambda表达式基
前言Java8由Oracle在2014年发布,是继Java5之后最具革命性的版本。Java8吸收其他语言的精髓带来了函数式编程,lambda表达式,Stream
Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算
上面的教程我们已经学会了如何在JSP网页中通过在字符系列之间嵌入Java表达式。但是通过将Java表达式放置到HTML进行大量的编程工作是很困难的。JSP另外允