Java9 way of Creating Immutable Lists, Sets, and Maps
1. Lists
You can create a List of elements with following one liner in Java 9
List<String> coloursList = List.of("red", "green", "blue");
List.of
gives you a immutable List which means you can't modify it once created. If you try to modify the list by adding or removing an element it throws java.lang.UnsupportedOperationException
List<String> coloursList = List.of("red", "green", "blue");
coloursList.add("foo");
this results in
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:70)
at java.base/java.util.ImmutableCollections$AbstractImmutableList.add(ImmutableCollections.java:76)
at StringSampleProgram.main(StringSampleProgram.java:13)
2. Sets
You can create a Set of elements with following one liner in Java 9
Set<String> coloursSet = Set.of("red", "green", "blue");
3. Maps
There are two ways you can create Immutable Map in Java9
- Using
Map.ofEntries()
You can use ofEntries static method and passjava.util.Map.Entry<K, V>
objects to it - Using
Map.of()
You can use of static method and pass keys and values one after another.
Following sample program shows you how to use both of them
import java.util.Map;
import static java.util.Map.entry;
public class Java9Maps {
public static void main(String[] args) {
Map<String, String> map1 = Map.ofEntries(entry("key1", "val1"), entry("key2", "val2"), entry("key3", "val3"));
Map<String, String> map2 = Map.of("key1", "val1", "key2", "val2", "key3", "val3");
System.out.println(map1);
System.out.println(map2);
}
}
Output:
{key1=val1, key2=val2, key3=val3}
{key1=val1, key2=val2, key3=val3}