2016-09-23 1 views
0

나는 다음과 같은 흐름이 : service.type 문자열이며, type도 문자열입니다자바 스트림 필터 널 포인터 문제

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

. 내 필터는 type이 null (또는 단순히 공백)이거나 주어진 유형의 모든 서비스를 반환해야합니다.

이 나에게의 오류가 발생합니다 :

java.lang.NullPointerException이 : com.eternity.service.OrderService.lambda $ getServicesForOrder $ 0 (0 OrderService.java:140) ~ [클래스에서 널 (null)을/: na] 에서 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) ~ [없음 : 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

디버깅을 시도 했습니까? 공정하게 람다 식으로 시도하지 않았습니다. – AxelH

답변

2

문제점은 다음과 같습니다. null 객체에 .isEmtpy()을 사용하고있었습니다. 내가 StringUltis.isEmpty( 방법을 사용해야했다 :

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