-
자바8 스트림 API & Optional<T>우아한테크캠프 2018. 7. 3. 22:50
자바8 기능을 의식적으로 사용하는 전 직장 동기 덕분에, 나 또한 자바8 기능을 의식적으로 사용하고 있다.
스트림
데이터 소스(배열, 컬렉션, 파일 etc...)가 무엇이든지 간에 같은 방식으로 처리할 수 있게 해준다.
스트림을 사용할 때 장점
코드가 간결해지고 이해하기 쉽다.
스트림 연산
중간 연산 : 연산결과가 스트림 ex) map( ), flatMap( )
- 자르기 - skip( ), limit( )
- 걸러내기 - filter( ), distinct( )
- 정렬 - sorted( )
- 스트림 타입 변환 - map( )
- 데이터 조회 - peek( )
- Stream<T[]>을 Stream<T>로 변환 - flatMap( )
최종 연산 : 연산 결과가 스트림이 아님 ex) reduce( ), collect( )
- forEach( )
- 통계 - count( ), sum( ), average( ), max( ), min( )
- 리듀싱 - reduce( )
- 컬렉션과 배열로 변환 - toList( ), toSet( ), toMap( ), toCollection( ), toArray( )
주의
1. 스트림은 데이터 소스를 읽기만 하지 원본을 변경하지 않는다. 수정한 것이 필요하다면 컬렉션이나 배열에 담아서 반환하면 된다.
2. 스트림은 한번 사용하면 닫혀서 다시 사용할 수 없다.
3. 지연된 연산(중간 연산을 호출해도 바로 실행되는 것이 아니다. 최종 연산이 호출되어야지만 비로소 중간연산도 실행된다)
Optional<T>
null일 수도 있는 객체를 감싸는 래퍼 클래스
변수명
변수명은 대개 "maybe"나 "opt"와 같은 접두어를 붙여서 Optional 타입의 변수라는 것을 명확히 나타낸다.
스트림에서 최종 연산의 결과 타입이 Optional<T> 인 이유?
Optional로 감싸서 반환 하게 되면 반환 결과가 null이더라도 Optional에 정의된 메소드를 통해서 간단히 처리 가능
참고
자바의 정석
https://www.slideshare.net/madvirus/8-35205661?next_slideshow=1
'우아한테크캠프' 카테고리의 다른 글
우아한테크캠프 Day05 (0) 2018.07.09 우아한테크캠프 Day04 (0) 2018.07.05 우아한테크캠프 Day03 (0) 2018.07.04 우아한테크캠프 Day02 (0) 2018.07.03 우아한테크캠프 Day01 (0) 2018.07.02