116. Getting a list from a stream
Collecting a Stream
into a List
is a popular task that occurs all over the place in applications that manipulate streams and collections.
In JDK 8, collecting a Stream
into a List
can be done via the toList()
collector as follows:
List<File> roots = Stream.of(File.listRoots())
.collect(Collectors.toList());
Starting with JDK 10, we can rely on the toUnmodifiableList()
collector (for maps, use toUnmodifiableMap()
, and for sets, toUnmodifiableSet()
):
List<File> roots = Stream.of(File.listRoots())
.collect(Collectors.toUnmodifiableList());
Obviously, the returned list is an unmodifiable/immutable list.
JDK 16 has introduced the following toList()
default method in the Stream
interface:
default List<T> toList() {
return (List<T>) Collections.unmodifiableList(
new ArrayList<>(Arrays.asList(this.toArray())));
}
Using this method to collect a Stream
into an unmodifiable/immutable...