2017-09-21 3 views
3

예상대로 작동하지 않습니다 : 동일한 널 (null)을하지 않습니다 내 서블릿에 게시 된 파일에서 이름을 얻을하기로했다람다 필터는 내 코드에서이 람다 식을 사용하고

File slika = new File(tempPath + File.separator + imena.stream().filter(x -> !x.trim().equals("null")).findFirst().get()); 

. ArrayList<String> imena의 내용을 확인한 결과, 다음과 같은 내용 (쉼표로 구분) : null, null, null, Photo0098.jpg가 있음을 확인했습니다. 마지막 하나는 내가 서버에 게시 한 것이고 필터에 의해 선택 될 것으로 예상되는 대신 null 포인터 예외가 발생합니다. 동일한 코드 조각은 파일 업로드를 처리하는 다른 서블릿에서 작동합니다. 다른 사람이 같은 조건에서 작동하더라도 내 코드가 여기에서 작동하지 않는 이유를 말해 줄 수 있습니까?

답변

6

목록의 값이 null 인 것 같습니다. 내용이 "null" 인 문자열이 아닙니다.

File slika = 
new File(tempPath + 
     File.separator + 
     imena.stream().filter(Objects::nonNull).findFirst().get()); 
     // Here --------------^ 
+1

도움 주셔서 감사합니다. 내 업로드 디렉토리에서 null이라는 파일과 내가 게시 한 다른 파일로 끝났기 때문에 String 자체가 null이라고 생각했습니다. 실제 null을 필터링하면 내 문제가 해결됩니다. –

2

당신의 요소 x가 null이기 때문이다 : Objects.nonNull에 메서드 참조를 사용하여 그들을 필터링의 우아한 방법입니다. string을 자르려고하면 NullPointerException이 발생합니다.

다른 처음 NullPointerException이 던져 것, 그것은 트림 아무것도 포함하고 있기 때문에 기존의 문자열은 결코 null을 반환 트리밍이

File slika = new File(tempPath + File.separator + imena.stream().filter(x -> x != null).findFirst().get()); 
1

을보십시오. 직접 null 값을 필터링하십시오.

imena.stream().filter(x -> x != null).findFirst().get();