1. Optional<T>

2. Optional 사용법

public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
		if(c.isEmpty()) {
				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);
}

3. Optional과 Stream

public static <E extends Comparable<E>> Optional<E> max(Collection<E> c) {
		return c.stream().max(Comparator.naturalOrder());
}