스트림
스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다.
쉽게 말해 for문과 Iterator를 사용했을 때 길어지는 코드를 매우 간결하게 줄일 수 있는 기능이다.
근데 가독성이나 기능 문제로 기존 코드를 사용하는 분들도 많다고 들었다..
- 스트림은 데이터 소스를 변경하지 않는다.
- 스트림은 일회용이다.
- 스트림은 작업을 내부 반복으로 처리한다.
스트림의 최종연산 - reduce()
이름에서 짐작할 수 있듯이, 스트림의 요소를 줄여나가면서 연산을 수행하고 최종 결과를 반환한다.
스트림의 모든 요소를 소모하게 되면 결과를 반환한다.
Optional<T> reduce (BinaryOperator<T> accumulator)
T reduce(T identity, BinaryOperator<T> accumulator)
첫 번째 코드는 초기값이 없는 reduce()이고, 두 번째 코드는 초기값이 있는 reduce()이다.
초기값이 없으면 처음 두 요소를 가지고 연산을 한 다음, 그 결과로 다음 요소와 연산한다.
초기값이 있으면 첫 번째 요소로 연산을 시작하고, 스트림의 요소가 하나도 없는 경우 초기값이 반환되므로 반환타입이 옵셔널이 아니다.
int count = intStream.reduce(0, (a,b) -> a + 1);
int sum = intStream.reduce(0, (a,b) -> a + b);
int max = intStream.reduce(Imteger.MIN_VALUE, (a,b) -> a > b ? a : b);
int min = intStream.reduce(Imteger.MAX_VALUE, (a,b) -> a < b ? a : b);
스트림의 최종연산 - collect()
스트림의 최종 연산 중에서 가장 복잡하고 유용하게 활용될 수 있는 것이 collect()이다.
스트림을 컬렉션과 배열로 변환
toList()
toSet()
toMap()
toArray()
등
Optional<T>와 OptionalInt
옵셔널은 Swift를 공부할 때 매우 자주 많이 접하던 문법이라 익숙하다.
자바 역시 연산의 최종 결과를 Optional 객체에 담아서 반환하는 것이며, 반환된 결과가 null인지 Optional에 정의된 메서드를 통해서 간단히 처리한다고 한다.
Optional 객체 생성하기
of() 또는 ofNullable()를 사용한다.
String str = "abc";
Optional<String> optVal = Optional.of(str);
Optional<String> optVal = Optional.of("abc");
// 단, null일 가능성이 있으면 무조건 ofNullable() 사용
Optional<String> optVal = Optional.of(null); // Error
Optional<String> optVal = Optional.ofNullable(null); // OK
'Book > 자바의 정석' 카테고리의 다른 글
[자바의 정석] Chapter 14. 람다 (0) | 2023.07.14 |
---|---|
[자바의 정석] Chapter 12. 제네릭, 열거형, 어노테이션 (0) | 2023.07.14 |
[자바의 정석] Chapter 11. 컬렉션 프레임워크 - Set, Map (0) | 2023.07.14 |
[자바의 정석] Chapter 11. 컬렉션 프레임워크 - List (0) | 2023.07.14 |
[자바의 정석] Chapter 8. 예외처리 (0) | 2023.07.14 |