Руководство по Java 9. Фабричные методы в Collections API.

В данной статье мы рассмотрим дополнения к Collections API в Java 9.

В Java 9 были добавлены новые фабричные методы в интерфейсы List, Set и Map, которые позволяют нам создавать неизменяемые экземпляры.

В Java 8 мы использовали следующий подход:


package net.proselyte.java9.collections;

import java.util.*;

public class ImmutableCollectionsJava8Demo {
    public static void main(String[] args) {
        List integerList = new ArrayList<>();
        integerList.add(1);
        integerList.add(2);
        integerList.add(3);

        integerList = Collections.unmodifiableList(integerList);
        System.out.println("integerList: " + integerList);

        Set integerSet = new TreeSet<>();
        integerSet.add(1);
        integerSet.add(2);
        integerSet.add(3);

        integerSet = Collections.unmodifiableSet(integerSet);
        System.out.println("integerSet: " + integerSet);

        Map<Integer, String> integerStringMap = new HashMap<>();
        integerStringMap.put(1, "One");
        integerStringMap.put(2, "Two");
        integerStringMap.put(3, "Three");

        integerStringMap = Collections.unmodifiableMap(integerStringMap);
        System.out.println(integerStringMap);
    }
}

В результате запуска данного класса мы получим следующий результат:


integerList: [1, 2, 3]
integerSet: [1, 2, 3]
{1=One, 2=Two, 3=Three}

Process finished with exit code 0

Рассмотрим подход, которые мы можем применить в Java 9:


package net.proselyte.java9.collections;

import java.util.AbstractMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class CollectionsFactoryMethodsDemo {
    public static void main(String[] args) {
        List integerList = List.of(1, 2, 3);
        System.out.println("integerList: " + integerList);

        Set integerSet = Set.of(1,2,3);
        System.out.println("integerSet: " + integerSet);

        Map<Integer, String> integerStringMap = Map.ofEntries(
          new AbstractMap.SimpleEntry<>(1, "One"),
          new AbstractMap.SimpleEntry<>(2, "Two"),
          new AbstractMap.SimpleEntry<>(3, "Three")
        );

        System.out.println(integerStringMap);
    }
}

В результате выполнения данной программы мы получим следующий результат:


integerList: [1, 2, 3]
integerSet: [2, 3, 1]
{2=Two, 3=Three, 1=One}

Process finished with exit code 0

На этом мы заканчиваем обзор новых фабричных методов в Collections API.
В следующей статье мы рассмотрим улучшения, касающиеся Stream API, которые были добавлены в Java 9.