【问题标题】:Java stream filter null pointer issueJava流过滤器空指针问题
【发布时间】:2017-01-31 22:25:32
【问题描述】:

我有以下流:

services = services.stream()
        .filter(service -> (service.getType().isEmpty() || service.getType().equals(type)))
        .collect(Collectors.toList());

其中service.type 是字符串,type 也是字符串。我的过滤器应该返回其 type 等于 null(或只是空白)或给定类型的所有服务。

这会引发以下错误:

java.lang.NullPointerException: null at com.eternity.service.OrderService.lambda$getServicesForOrder$0(OrderService.java:140) 〜[类/:na]在 java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174) ~[na:1.8.0_77] 在 java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) ~[na:1.8.0_77] 在 java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_77] 在 java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_77] 在 java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_77] 在 java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_77] 在 java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[na:1.8.0_77] 在 com.eternity.service.OrderService.getServicesForOrder(OrderService.java:141) ~[classes/:na]

我错过了什么?

【问题讨论】:

  • 你尝试调试了吗?公平起见,从未尝试过使用 lambda 表达式。

标签: java java-stream


【解决方案1】:

问题是:我在一个空对象上使用了.isEmpty()。我不得不使用StringUtils.isEmpty() 方法:

services = services.stream()
        .filter(service -> (StringUtils.isEmpty(service.getType()) || service.getType().equals(type)))
        .collect(Collectors.toList());

【讨论】:

  • 您也可以使用 .filter(Objects::nonNull) 预先过滤掉空对象
猜你喜欢
  • 2021-11-08
  • 1970-01-01
  • 2018-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
相关资源
最近更新 更多