p.230
코드 37-6의 정적 필드 m의 초기화 과정 중 toMap 함수 중 (x,y) -> y 부분에 대한 설명으로
두 번째 수집기의 병합 함수인 (x,y) -> y 는 선언만 하고 실제로는 쓰이지 않는데, 이는 단지 EnumMap을 얻으려면 맵 팩터리가 필요하고 수집기들은 점층적 팩터리를 제공하기 때문이라고 되어있다.
실제 Collectors.toMap 함수를 보면
public static <T, K, U, M extends Map<K, U>>
Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapFactory) {
BiConsumer<M, T> accumulator
= (map, element) -> map.merge(keyMapper.apply(element),
valueMapper.apply(element), mergeFunction);
return new CollectorImpl<>(mapFactory, accumulator, mapMerger(mergeFunction), CH_ID);
}
로, (x,y) -> y는 mergeFunction 인자에 해당한다. 그런데 내가 이해한 것은 이 (x,y) -> y가 mapFactory 인자에 해당된다고 설명하고 있다고 이해했다. 그 이유는 맵 팩터리가 필요하고 부분이다.
또한, 실제로 (x,y) -> y 는 map을 초기화 하는데에 사용되고 있다.
예를 들어, (x,y) -> x로 수정하면, key가 중복된 경우에 먼저 선언된 Transition을 넣게 되고, -> y라면 나중에 선언된 Transition으로 덮어씌운다는 의미이다. 참고
질문
(x,y) -> y 에 대한 본문을 어떻게 이해하면 좋을까요??
다른분들은 어떻게 이해하셨나요?
p.230 코드 37-6의 정적 필드 m의 초기화 과정 중
toMap
함수 중(x,y) -> y
부분에 대한 설명으로두 번째 수집기의 병합 함수인 (x,y) -> y 는 선언만 하고 실제로는 쓰이지 않는데, 이는 단지 EnumMap을 얻으려면 맵 팩터리가 필요하고 수집기들은 점층적 팩터리를 제공하기 때문
이라고 되어있다.실제 Collectors.toMap 함수를 보면
로,
(x,y) -> y
는 mergeFunction 인자에 해당한다. 그런데 내가 이해한 것은 이(x,y) -> y
가 mapFactory 인자에 해당된다고 설명하고 있다고 이해했다. 그 이유는맵 팩터리가 필요하고
부분이다.또한, 실제로 (x,y) -> y 는 map을 초기화 하는데에 사용되고 있다. 예를 들어, (x,y) -> x로 수정하면, key가 중복된 경우에 먼저 선언된 Transition을 넣게 되고, -> y라면 나중에 선언된 Transition으로 덮어씌운다는 의미이다. 참고
질문
(x,y) -> y 에 대한 본문을 어떻게 이해하면 좋을까요?? 다른분들은 어떻게 이해하셨나요?