The .collect()
method in Java Streams is one of the most powerful and important terminal operations — especially when you’re turning your processed data into a collection or a result.
✅ What is .collect()
?
<R, A> R collect(Collector<? super T, A, R> collector);
It’s a terminal operation that:
- Triggers the stream pipeline
- Accumulates the elements of a stream into a result container
- Uses a
Collector
to define how data should be collected
🧠 Think of .collect()
as:
“Take this stream, and gather its elements into something meaningful (like a
List
,Map
,String
, etc).”
✅ Most Common Uses of .collect()
1. Collect to a List
List<String> result = Stream.of("a", "b", "c")
.collect(Collectors.toList());
2. Collect to a Set
Set<String> set = Stream.of("apple", "banana", "apple")
.collect(Collectors.toSet());
3. Join into a String
String result = Stream.of("A", "B", "C")
.collect(Collectors.joining(", ")); // Output: "A, B, C"
4. Group elements by a key
Map<Integer, List<String>> groupedByLength = Stream.of("cat", "house", "pen")
.collect(Collectors.groupingBy(String::length));
5. Count elements
long count = Stream.of("a", "b", "c").collect(Collectors.counting());
🔧 Under the hood: What’s a Collector
?
A Collector
is an interface that defines:
- How to accumulate items
- How to combine intermediate results (for parallel streams)
- How to finish and produce the final result
Most of the time, we use ready-made collectors from Collectors
class.
🔁 Collectors Utility Methods
Collector | Description |
---|---|
toList() | Collects elements into a List |
toSet() | Collects elements into a Set |
toMap(kFunc, vFunc) | Collects into a Map |
joining() | Joins elements into a string |
groupingBy(func) | Groups elements into a Map<K, List<V>> |
partitioningBy(predicate) | Partitions elements into two groups |
counting() | Counts the elements |
mapping(...) | Adapts elements before collecting |
✅ Summary
Feature | .collect() in Java Streams |
---|---|
Type | Terminal operation |
Purpose | Gathers processed data into a final container |
Backed by | Collector (from Collectors utility class) |
Common uses | toList() , toSet() , joining() , groupingBy() |
💬 You can think of .collect()
as:
The “build phase” at the end of your stream pipeline — where all the transformed and filtered data gets packaged into something useful.