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...