2017-04-12 4 views
3

정수 목록 (Optional List of Integers)이 있습니다. 목록이 실제로 존재하는지 확인한 다음 스트림으로 변환하고 싶습니다. 이 일을하는 한 가지 방법은 내가 그 경우 상태를 원하는 해달라고,선택적 정수 목록 반복 ifPresent

Optional<List<Integer>> listOfNumbers = ... 
if (listOfNumbers.isPresent()) { 
    listOfNumbers.get().stream(); 
} 

입니다하지만. 내가 검색 한 ifPresent() 같은 일 않는다는 것을 보았다하지만 난 listOfNumbers.ifPresent(this::get))을 수행 할 때, 나는 다음과 같은 오류 얻을 :

non-static variable this cannot be referenced from a static context

당신이 날은 효율적인 방법으로이 작업을 수행 도와주세요 수 있습니까? 이것은 여전히 ​​나에게 새로운 것이므로 만약 내 이해에 부정확 한 것이 있으면 알려 주시기 바랍니다.

의견에서 지적
+2

'listOfNumbers.orElse (Collections.emptyList()). stream() ...'? –

답변

7

, 가장 깨끗한 방법은 Stream 인이 Collections.emptyListOptional.orElse 방법을 사용하여 얻을 수 있습니다 :

Stream<Integer> stream = listOfNumbers.orElse(Collections.emptyList()).stream(); 

Optional.map와 다른 가능한 해결책 :

Stream<Integer> stream = listOfNumbers.map(List::stream).orElse(Stream.empty()); 
+2

나는 두 번째 버전이 가장 좋습니다. 우리는 실제로 빈 목록을 필요로하지 않고 단지 빈 스트림만을 필요로하기 때문에 더 많은 것을 생각합니다. –