T
>public static <E extends Comparable<E>>
Optional<E> max(Collection<E> c) {
if (c.isEmpty()) //(1)
return Optional.empty();
E result = null;
for (E e : c)
if (result == null || e.compareTo(result) > 0)
result = Objects.requireNonNull(e);
return Optional.of(result); (2)
}
throw new IllegalArgumentException("빈 컬렉션");
보다는 Optional.empty();
을 반환하는게 더 낫다.public static <E extends Comparable<E>>
Optional<E> max(Collection<E> c) {
return c.stream().max(Comparator.naturalOrder());
}
String lastWordInLexicon = max(words).orElse("단어 없음...");
String lastWordInLexicon2 = max(words).orElseThrow(NoSuchElementException::new);
String lastWordInLexicon3 = max(words).get();
public static void main(String[] args) {
//부모 프로세스의 PID를 출력하거나 부모가 없다면 "N/A"를 출력하는 코드
ProcessHandle ph = ProcessHandle.current();
// isPresent를 적절치 못하게 사용했다. (1)
Optional<ProcessHandle> parentProcess = ph.parent();
System.out.println("부모 PID: " + (parentProcess.isPresent() ?
String.valueOf(parentProcess.get().pid()) : "N/A")); //부모 PID: 27194
// 같은 기능을 Optional의 map를 이용해 개선한 코드 (2)
System.out.println("부모 PID: " +
ph.parent().map(h -> String.valueOf(h.pid())).orElse("N/A")); //부모 PID: 27194
}
Optional<List<T>>
은 List<T>
로 반환하기(item-54)결과가 없을 수 있으며, 클라이언트가 이 상황을 특별하게 처리해야 한다면
Optional<T>
반환