В 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()
и т.д.