Open MadCom96 opened 1 year ago
A mutable reduction operation(such as Stream.collect()) collects the stream elements in a mutable result container(collection) as it processes them. Mutable reduction operations provide much improved performance when compared to an immutable reduction operation(such as Stream.reduce()).
collect()
는 하나의 mutable 한 컨테이너(e.g. Stringbuilder, ArrayList 등)을 생성하여 각각의 값을 축적시켜 값을 반환합니다.
Stream.reduce() operation, on the other hand, uses immutable result containers and as a result needs to instantiate a new instance of the container at every intermediate step of reduction which degrades performance.
reduce()
는 두 개의 immutable한 값을 결합하여 새로운 값을 immutable 컨테이너(e.g. int, double 등)을 사용하여 초기값에 축적하는 식으로 값을 반환합니다.
예시로 reduce()
와 collect()
의 작동방식에 대해 알아보자면,
스트림으로 a <- b <- c <- d 을 한다면
// reduce()
((a # b) # c) # d
// collect()
// 1. K 만들기
// 2. a,b,c,d K 에 넣어주기
k.append(a).append(b).append(c).append(d)
// 3. K 반환하기
reduce()
를 collect()
처럼 사용할 때 주의해야 할 의미론적인 문제는 초기값과 연산입니다.
기능적인 문제는 병렬 처리와 가변상태입니다.
reduce()
연산 완료 후 mutable 컨테이너에 병합하는 것을 권장합니다.
문제
메서드의 잘못된 사용에 대해
contents - 세부 내용
책에서 reduce를 다양하게 활용할 수 있고 그 방법을 소개받았습니다. 이를 collect처럼 사용할 때, 의미론적인 문제와 함께 기능적인 문제가 있다고 적혀있습니다. 의미론적인 문제는 추구해야 할 방향에 관한 문제라 이해가 되었지만, 기능적인 문제는 잘 와닿지가 않네요. 공부해보고싶습니다!
참고
206페이지