В Java 10, которая выйдет уже в марте этого года, появятся несколько новых методов, благодаря которым будет легче работать с неизменяемыми коллекциями.
Во-первых, это методы, создающие неизменяемую копию другой коллекции: List.copyOf(), Set.copyOf() и Map.copyOf(). Это является полезным дополнением, потому что в Java 9, чтобы создать, например, неизменяемую копию списка, нужно вызвать List.of(list.toArray()), что выглядит довольно неуклюже.
Во-вторых, это методы Collectors.toUnmodifiableList(), Collectors.toUnmodifiableSet() и Collectors.toUnmodifiableMap(). Они позволяют свернуть Stream и вернуть соответствующую неизменяемую коллекцию:
// Generate all powers of 2 less than 100 // and return an unmodifiable List Stream .iterate(1, i -> i < 100, i -> i * 2) .collect(toUnmodifiableList()); // [1, 2, 4, 8, 16, 32, 64]
Напомним, что неизменяемые коллекции впервые появились в Java 9 с введением методов-фабрик: List.of(), Set.of(), Map.of() и Map.ofEntries(). До Java 9 поддержки неизменяемых коллекций не было, а были только неизменяемые view коллекций: Collections.unmodifiableCollection(), Collections.unmodifiableList() и т.д.