Java 10 introduces several new methods to facilitate the creation of unmodifiable collections.
The List.copyOf, Set.copyOf, and Map.copyOf methods create new collection instances from existing instances. For example:
List<String> modifiable = Arrays.asList("foo", "bar");
List<String> unmodifiableCopy = List.copyOf(list);
// Note that since Java 9, you can also use "of" to create
// unmodifiable collections
List<String> unmodifiable = List.of("foo", "bar");
There are also new collector methods, toUnmodifiableList, toUnmodifiableSet, and toUnmodifiableMap, to allow the elements of a stream to be collected into an unmodifiable collection. For example:
// Java 10
Stream.of("foo", "bar").collect(toUnmodifiableList());
// before Java 10
Stream.of("foo", "bar").collect(
collectingAndThen(toList(), Collections::unmodifiableList));