文章目录

  • 简介
  • 传统写法
  • 使用filter
  • 总结

简介

在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

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问 www.flydean.com

在java 8 stream表达式中实现if/else逻辑相关推荐

  1. Java 8 Stream Api 中的 skip 和 limit 操作

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 Java 8 Stream API 中的sk ...

  2. java 8 lambda表达式中的异常处理

    文章目录 简介 处理Unchecked Exception 处理checked Exception 总结 java 8 lambda表达式中的异常处理 简介 java 8中引入了lambda表达式,l ...

  3. Java 三目表达式中的NullPointerException问题

    Java 三目表达式中的NullPointerException问题 背景 问题 思考 找资料 反思 背景 旧系统改造. 问题 Integer rank = bpo.getLocalRank() != ...

  4. Java 8 Stream Api 中的 peek、map、foreach区别

    #1. 前言 我在Java8 Stream中讲述了 Java 8 Stream API 的一些内容.今天再看一下peek.map.foreach区别. 2. peek peek 操作接收的是一个 Co ...

  5. Java 8 Stream Api 中的 map和 flatMap 操作

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1.前言 Java 8  ...

  6. java peek函数_Java 8 Stream Api 中的 peek 操作

    1. 前言 我在 Java 8 Stream API中的 map 和flatMap 中讲述了Java8 Stream API中 map 操作和 flatMap 操作的区别.然后有小伙伴告诉我 peek ...

  7. java 8——Stream

    Part 1 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一部分,话不多说,直奔主题. 什么是流API? 它能做一些什么? ...

  8. 技巧 | Java 8 Stream 中异常处理的4种方式

    Stream API 和 lambda 是 Java8以来对Java的重大改进.从那时起,我们可以使用更具有功能性的语法风格的代码.但是有个问题就是,我们使用了 lambda 表达式,那 lambda ...

  9. java.util.stream_java.util.stream.Stream 接口中的常用方法

    流模型的操作很丰富,下面介绍一些常用的API.这些方法可以被分成两种: 延迟方法 返回值类型仍然是 Stream 接口自身类型的方法,因此支持链式调用.(除了终结方法外,其余方 法均为延迟方法.) 终 ...

最新文章

  1. STM32 UART串口驱动程序
  2. CentOS下初次使用MySQL
  3. 计算机二级web题目(7.3)--简单应用题1
  4. 初识openstack
  5. Java IO/NIO教程
  6. 深度理解java jvm,深度理解JVM
  7. 沃尔玛痛失世界最大零售商 电商凶猛!
  8. java常见基础面试题
  9. 计算机后端维护,机房智能交通后台系统运行维护内容.doc
  10. tplink703无线打印服务器,tplink703路由器怎么配置client模式
  11. 敲一万小时的代码可以成为大牛吗?
  12. LTE-UMTS长期演进与实践学习(1)——LTE基本架构
  13. Windows画图使用总结
  14. 硅计算机的原理,量子计算机工作原理揭秘
  15. ‘xxx‘ “将对您的电脑造成伤害。 您应该将它移到废纸篓。”mac一直弹窗并关不掉的解决方式
  16. SolrCloud下DIH实践
  17. 关于Yolov5在测试时,图像大小被调整的问题
  18. C# Label 通过Panel中的ScrollBar实现滑动条
  19. 三星浏览器高阶使用技巧-修改CountryCode和UA
  20. 7.笔记 MySQL学习——向表中添加行

热门文章

  1. Qt界面开发(各种控件以及图表)
  2. 漫游Kafka实战篇之搭建Kafka运行环境
  3. PostgreSQL学习笔记1之表定义
  4. \sdk\include\wspiapi.h(47) : error C2265: 'Unknown' : reference to a zero-sized array is illegal 解
  5. cocos2d-x初探学习笔记(12)--图形绘制
  6. cocos2d-x初探学习笔记(9)--粒子系统
  7. 利用WinPcap技术捕获数据包
  8. Socket之UDP客户端【Python】
  9. C++中的指针与引用
  10. 基于MySQL和DynamoDB的强一致性分布式事务实践