在java 8 stream表达式中实现if/else逻辑
Posted Dale Lucy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java 8 stream表达式中实现if/else逻辑相关的知识,希望对你有一定的参考价值。
简介
在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业务逻辑。
最近整理了一系列的Java面试题,包含了Java基础、进阶、多线程、并发编程、数据库(MySQL、Redis、MongoDB、Memcachedd等等)、Spring全家桶、MyBatis、ZooKeeper、Dubbo、Elasticsearch、RabbitMQ、Kafka、Linux、Netty、Tomcat以及阿里、腾讯、字节、百度等大厂的面试真题,另外可以微信搜索539413949获取我为大家准备的资料
在 100 多个文件中实现序列化
【中文标题】在 100 多个文件中实现序列化【英文标题】:Implement Serialisation in more than 100 files 【发布时间】:2015-10-15 21:09:56 【问题描述】:我必须在 200 多个 java 文件中编写实现可序列化的工具。有什么工具可以帮忙,因为这是非常重复的工作。
【问题讨论】:
【参考方案1】:您可以在 IDE 中使用查找和替换正则表达式并进行清理,例如将public class (.*)
替换为public class $1 implements java.io.Serializable
【讨论】:
以上是关于在java 8 stream表达式中实现if/else逻辑的主要内容,如果未能解决你的问题,请参考以下文章