2016-09-23 148 views
0

我有以下流:Java流过滤空指针问题

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

其中service.type是字符串,type也是一个字符串。我的过滤器应该返回所有服务,其type等于空(或者简单地为空)或给定的类型。

这引发了我的错误:

显示java.lang.NullPointerException:在 com.eternity.service.OrderService.lambda $ getServicesForOrder $ 0(OrderService.java:140) 〜[班空/ :na] at java.util.stream.ReferencePipeline $ 2 $ 1.accept(ReferencePipeline.java:174) 〜[na:1.8.0_77] at java.util.ArrayList $ ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) 〜[na:1.8.0_77] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) 〜[na:1.8.0_7 7]在 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] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 〜[na:1.8.0_77] at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java :499) 〜[NA:1.8.0_77]在 com.eternity.service.OrderService.getServicesForOrder(OrderService.java:141) 〜[班/:NA]

我缺少什么?

+0

你试过调试吗?从来没有尝试过使用lambda表达式来公平。 – AxelH

回答

2

问题是:我在空对象上使用.isEmtpy()。我不得不使用StringUltis.isEmpty()方法:

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