Collector interface components¶
The java.util.stream.Collector interface defines a contract for mutable reduction operations, often used in conjunction with stream().collect() to transform input elements into a cumulative result.^[600-developer__java__java8__java8-collect.md]
Core Characteristics¶
Unlike reduction operations (such as reduce) which typically produce immutable results by combining elements iteratively, a Collector relies on a mutable result container^[600-developer__java__java8__java8-collect.md]. This approach allows for more efficient processing by accumulating values into a shared structure rather than creating new objects with every step^[600-developer__java__java8__java8-collect.md]. The standard library provides a utility class, java.util.stream.Collectors, which supplies common implementations of this interface^[600-developer__java__java8__java8-collect.md].
Functional Components¶
The Collector interface is structurally defined by four primary functional components that manage the lifecycle of the mutable result container^[600-developer__java__java8__java8-collect.md]:
- Supplier (
supplier()): Creates a new, empty result container to hold the accumulation process^[600-developer__java__java8__java8-collect.md]. - Accumulator (
accumulator()): Defines the operation to incorporate a new data element into the mutable result container^[600-developer__java__java8__java8-collect.md]. - Combiner (
combiner()): Defines how to merge two result containers into one, typically used in parallel processing to combine partial results^[600-developer__java__java8__java8-collect.md]. - Finisher (
finisher()): Performs an optional final transformation on the container, often converting the mutable accumulation structure into the final immutable result type^[600-developer__java__java8__java8-collect.md].
Related Concepts¶
- [[Java Streams]]
- [[Mutable reduction]]
- [[groupingBy]]
Sources¶
^[600-developer__java__java8__java8-collect.md]