Open syoun602 opened 2 years ago
Stream chars = Stream.of(”A”, “B”, “C”);
Collection collection = Arrays.asList("A", "B", "C");
collection.steam()
// 중간연산...
// 최종연산...
public Stream collectionAsStream(Collection collection) {
return collection.stream();
}
이렇게 stream을 return할 경우, collection이 비어있을 때 NullPointerException이 발생할 수 있다.
방법 1.
public Stream collectionAsStream(Collection collection) {
return collection != null ? collection.stream() : Stream.empty();
} // Stream에도 emptyStream()이 있다!
방법 2.
public Stream collectionAsStream(Collection collection) {
return Optional.ofNullable(collection)
.map(Collection::stream)
.orElseGet(Stream::empty);
} // Stream에도 emptyStream()이 있다!
어떤 데이터가 null이 올 수도 있고 아닐 수도 있는 경우에는 Optional.ofNullable로 생성할 수 있다. 그리고 이후에 orElse 또는 orElseGet 메소드를 이용해서 값이 없는 경우라도 안전하게 값을 가져올 수 있다.
// Optional의 value는 값이 있을 수도 있고 null 일 수도 있다.
Optional<String> optional = Optional.ofNullable(getName());
String name = optional.orElse("anonymous");// 값이 없다면 "anonymous" 를 리턴
List<String> listOfStuffFiltered = Optional.ofNullable(listOfStuff)
.orElseGet(Collections::emptyList)
.stream()
.filter(Objects::nonNull) // null이 아닌 것들만 filter해서 가지고 있도록 할 수 있다
.collect(Collectors.toList());
문제
null에 안전한 스트림은 어떻게 생성할까?
선정 배경
null이 될 수 있는 객체로 스트림 만들기를 보고 스트림에서 null처리를 할 수 있는 방법에 대해 간략하게 조사해보았다.
관련 챕터
[5장] 스트림 활용 p.151