<U> U reduce(U identity,
BiFunction<U, ? super T, U> accumulator,
BinaryOperator<U> combiner);
어큐뮬레이터는 (타입 T
로 나타낸다) (유형 U
로 표기 됨) reduce
연산의 중간 결과에 Stream
의 요소를 추가하고, 갱신 된 결과를 돌려주는 함수 (유형도 U
).
따라서 피연산자와 결과가 모두 같은 유형 인 BinaryOperator
으로 정의 할 수 없습니다.
예를 들어, reduce
전화 발신 Stream<String>
에 적용 모든 요소의 길이의 합을 생산하는 BiFunction<Integer,String,Integer>
의 축적로 전달할 수 있습니다. 이 경우 BinaryOperator<Integer>
또는 BinaryOperator<String>
을 사용할 수 없습니다. 한편
상기 결합기
는 (동일한 타입의 두 U
) 개의 중간 결과를 받아 그 입력 U
이기도 결과로 병합. 따라서 (BiFunction<U,U,U>
까지 확장)을 사용할 수 있습니다.
질문은 완전히 명확하지 않지만 http://stackoverflow.com/questions/35680706/what-are-good-reasons-for-choosing-invariance-in-an-api-와 관련이있을 수 있습니다. (오히려 "반대"질문 인 것처럼 보이지만 ...) – Marco13