Java 9 Collection Factory Methods
In Java 9, new static factory methods have been added to the List, Set, and Map interfaces to create immutable instances of these collections.
These factory methods provide a more concise way to create collections.
Old Method to Create Collections
Example
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Tester {
public static void main(String []args) {
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("C");
set = Collections.unmodifiableSet(set);
System.out.println(set);
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list = Collections.unmodifiableList(list);
System.out.println(list);
Map<String, String> map = new HashMap<>();
map.put("A","Apple");
map.put("B","Boy");
map.put("C","Cat");
map = Collections.unmodifiableMap(map);
System.out.println(map);
}
}
Execution output:
[A, B, C]
[A, B, C]
{A=Apple, B=Boy, C=Cat}
New Method to Create Collections
In Java 9, the following methods have been added to the List, Set, and Map interfaces and their overloaded objects.
static <E> List<E> of(E e1, E e2, E e3);
static <E> Set<E> of(E e1, E e2, E e3);
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3);
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries)
-
The List and Set interfaces have overloaded of(...)
methods for 0 to 10 parameters.
-
The Map interface has overloaded of(...)
methods for 0 to 10 parameters.
-
For the Map interface, if there are more than 10 parameters, you can use the ofEntries(...)
method.
New Method to Create Collections
Example
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.AbstractMap;
import java.util.Map;
import java.util.Set;
public class Tester {
public static void main(String []args) {
Set<String> set = Set.of("A", "B", "C");
System.out.println(set);
List<String> list = List.of("A", "B", "C");
System.out.println(list);
Map<String, String> map = Map.of("A","Apple","B","Boy","C","Cat");
System.out.println(map);
}
}
Map<String, String> map1 = Map.ofEntries(
new AbstractMap.SimpleEntry<>("A", "Apple"),
new AbstractMap.SimpleEntry<>("B", "Boy"),
new AbstractMap.SimpleEntry<>("C", "Cat"));
System.out.println(map1);
}
}
Output result:
[A, B, C]
[A, B, C]
{A=Apple, B=Boy, C=Cat}
{A=Apple, B=Boy, C=Cat}