스트림의 연산
< 중간 연산 >
- n번 가능
- 스트림을 반환

< 최종 연산 >
- 1번 가능
- 스트림 요소 소모
- int, boolean, Optional을 반환

스트림의 중간 연산
- 스트림 자르기 : skip(), limit()

- 스트림 요소 걸러내기 : filter(), distinct()

- 스트림 정렬하기 : sorted()

- Comparator의 comparing()으로 정렬 기준을 제공

- 추가 정렬 기준을 제공할 때는 thenComparing()을 사용

- 스트림 요소 변환하기 : map()

- 스트림 요소를 소비하지 않고 엿보기 : peek()

- 스트림의 스트림을 스트림으로 변환하기 : flatMap()

Optional<T>
- T 타입 객체의 래퍼클래스 : Optional<T>


- 간접적으로 null 다루기 위한 것임
1. null을 직접적으로 다루는 것은 위험 (NullpointException 발생 위험)
2. 직접적으로 하면 null 체크 해야함 (if문 필수, 코드 지저분)
Optional<T> 객체 생성하기

Optional<T> 객체의 값 가져오기

< 예제 1 >
opt == "" 인 경우

< 예제 2 >
opt == "abc" 인 경우

OptionalInt, OptionalLong, OptionalDouble
- Optional<T> 보다 성능이 좋음

< 예제 >

