SSAFY-Book-Study / modern-java-in-action

모던 자바 인 액션 북스터디입니다.
1 stars 10 forks source link

2 Weeks - [reduce를 collect처럼 사용할 때의 문제] #33

Open MadCom96 opened 1 year ago

MadCom96 commented 1 year ago

문제

메서드의 잘못된 사용에 대해

contents - 세부 내용

책에서 reduce를 다양하게 활용할 수 있고 그 방법을 소개받았습니다. 이를 collect처럼 사용할 때, 의미론적인 문제와 함께 기능적인 문제가 있다고 적혀있습니다. 의미론적인 문제는 추구해야 할 방향에 관한 문제라 이해가 되었지만, 기능적인 문제는 잘 와닿지가 않네요. 공부해보고싶습니다!

참고

206페이지

skagmltn7 commented 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()처럼 사용할 때 주의해야 할 의미론적인 문제는 초기값과 연산입니다.

기능적인 문제는 병렬 처리와 가변상태입니다.

스택오버플로우

자바8 공식 문서