我有一个对象列表说汽车.我想基于使用Java 8的一些参数来过滤此列表.但是如果参数为null,则抛出NullPointerException.如何过滤掉空值?

目前的代码如下

requiredCars = cars.stream().filter(c -> c.getName().startsWith("M"));

如果getName()返回null,则抛出NullPointerException.

解决方法:

在这个特定的例子中,我认为@Tagir是100%正确的,将它放入一个过滤器并进行两次检查.我不会使用Optional.ofNullable,可选的东西实际上是返回类型不做逻辑……但实际上既不在这里也不在那里.

我想指出java.util.Objects在一个广泛的情况下有一个很好的方法,所以你可以这样做:

cars.stream()

.filter(Objects::nonNull)

这将清除你的空对象.对于不熟悉的人来说,这是以下方面的简写:

cars.stream()

.filter(car -> Objects.nonNull(car))

要部分回答手头的问题,请返回以“M”开头的车名列表:

cars.stream()

.filter(car -> Objects.nonNull(car))

.map(car -> car.getName())

.filter(carName -> Objects.nonNull(carName))

.filter(carName -> carName.startsWith("M"))

.collect(Collectors.toList());

一旦习惯了速记lambda,你也可以这样做:

cars.stream()

.filter(Objects::nonNull)

.map(Car::getName) // Assume the class name for car is Car

.filter(Objects::nonNull)

.filter(carName -> carName.startsWith("M"))

.collect(Collectors.toList());

不幸的是,一旦你.map(Car :: getName)你只会返回名字列表,而不是汽车.如此不那么美丽但完全回答了这个问题:

cars.stream()

.filter(car -> Objects.nonNull(car))

.filter(car -> Objects.nonNull(car.getName()))

.filter(car -> car.getName().startsWith("M"))

.collect(Collectors.toList());

标签:java,java-8,lambda,null,nullpointerexception

来源: https://codeday.me/bug/20190925/1817205.html

java8 nullpoint_仅当在Java8中使用lambda时不为null时才过滤值相关推荐

  1. null对象 java_java中当给一个对象赋值为null时发生了什么

    比如下面的代码 String[] arr = new String[10]; arr=null; 将arr这个引用置空,不指向任何对象. 上面new的那个数组对象,则没有任何引用指向它,垃圾回收器可以 ...

  2. java中任何变量都可以被赋值为null,java中当给一个对象赋值为null时发生了什么...

    比如下面的代码 String[] arr = new String[10]; arr=null; 将arr这个引用置空,不指向任何对象. 上面new的那个数组对象,则没有任何引用指向它,垃圾回收器可以 ...

  3. java8中的lambda表达式实用详解

    java8中的lambda表达式实用详解 1. lambda简介 ​ Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中 ...

  4. 项目中使用 java函数式编程_函数式编程在Java8中使用Lambda表达式进行开发

    事情起因 如果不喜欢看故事的同学,请前往下一章节. 事情起因是我打算集成Redis缓存,配置了Redis以后,发现@Cacheable注解始终不生效,折腾了大半天以后,我的心态已经崩了,决定不使用@C ...

  5. android java8 试用_如何在 Android 中使用 Java8

    Android官方兼容方案 工具方面要求 Android Studio 2.1 以上 启用 Jack 编译 不过这个 Jack 编译会带来一些问题,例如,不能用 Instant Run,不能用 Lin ...

  6. 《Java8实战》笔记(03):Lambda表达式

    本文源码 Lambda 管中窥豹 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. Lambda表达 ...

  7. java8 list find_java8 多个list对象用lambda求差集操作

    业务场景:调用同步接口获取当前全部有效账户,数据库已存在部分账户信息,因此需要筛选同步接口中已存在本地的帐户. 调用接口获取的数据集合 list list = response.getdata().g ...

  8. 仅在序列化过程中使用@JsonIgnore,而不是反序列化

    本文翻译自:Only using @JsonIgnore during serialization, but not deserialization I have a user object that ...

  9. Android之ListView异步加载图片且仅显示可见子项中的图片

    折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整 ...

最新文章

  1. java是否支持freertos_使用GCC配置FreeRTOS(ARM)
  2. BZOJ1801: [Ahoi2009]chess 中国象棋
  3. jdk1.8配置(自我速成)
  4. Eclipes导入的项目中的中文都是乱码的解决办法
  5. 微型计算机控制技术试卷B,微型计算机控制技术试卷b..doc
  6. Linux操作系统基础解析之(四)——Linux基本命令剖析(2)
  7. 想了解任务型对话机器人,我们先从自然语言理解聊起
  8. 将有格式的int解析成float
  9. 你所能用到的数据结构之番外篇---逆袭的面向对象(一)
  10. java用循环图形显示_请问如何在使用循环绘制图形时使每个图形的显示之间有一定的延迟时间?...
  11. kmeans算法python实现(iris数据集)
  12. 网页换肤,模块换肤,jQuery的Cookie插件使用(转)
  13. 联想电脑尺寸在哪里看_联想电脑型号怎么查看【详细介绍】
  14. CSS元素总结及HTML布局
  15. Machine Learning Practical 爱宝课程记录week1
  16. PAT_乙级_1003_筱筱
  17. 数字图像处理(1)-采样,量化,空间分辨率,灰度级分辨率
  18. [普及] NOIP 2012 文化之旅
  19. java编一个求圆柱表面积_Java:输入圆柱体的半径和高,计算并输出圆柱体的体积和表面积...
  20. STFT的综合分析--滤波器组求和(FBS)和叠相相加(OLA)

热门文章

  1. QEMU, KVM, QEMU-KVM 和 Goldfish
  2. 通过JAVA的反射调用类中的公有私有方法
  3. [译] 在远程工作中领悟到的 10 件事
  4. 关于IPMI的几个问题
  5. 如何让主机合规分析报告评分达到90分?
  6. Java深入 - Java虚拟机性能问题监控和排查
  7. Devexpress 15.1.8 Breaking Changes
  8. 单元测试时使用Ninject的小问题
  9. Microsoft Azure 大计算 – 宣布收购 GreenButton
  10. [CareerCup][Google Interview] Find kth number in a BST