Java9 集合的工厂方法

1 Java9 集合的工厂方法的介绍

Java 9 Collection库包括用于List,Set和Map接口的静态工厂方法。这些方法对于创建少量集合很有用。

假设,如果要创建5个元素的列表,则需要编写以下代码。

2 遍历List,没有使用工厂方法前

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.ArrayList;  
import java.util.List;  
public class FactoryMethodsExample {  
    public static void main(String[] args) {  
        List<String> list = new ArrayList<>();  
        list.add("Java");  
        list.add("JavaFX");  
        list.add("Spring");  
        list.add("Hibernate");  
        list.add("JSP");  
        for(String l : list){  
            System.out.println(l);  
        }  
    }  
}  

输出结果为:

Java
JavaFX
Spring
Hibernate
JSP

3 Java9 List的工厂方法

在上面的代码中,为每个列表元素重复调用add方法,而在Java 9中,我们可以使用工厂方法在单行代码中进行添加方法。

工厂方法是静态方法的一种特殊类型,用于创建集合的不可修改实例。这意味着我们可以使用这些方法来创建少量元素的List,Set和Map。

它是不可修改的,因此添加新元素将引发java.lang.UnsupportedOperationException

每个接口都有其自己的工厂方法,下表中列出了List接口的所有工厂方法:

修饰符 方法 描述
static <E> List<E> Of() 返回一个包含零个元素的不可变列表。
static <E> List<E> of(E e1) 返回一个包含一个元素的不可变列表。
static <E> List<E> of(E... elements) 返回一个包含任意数量元素的不可变列表。
static <E> List<E> of(E e1, E e2) 返回一个包含两个元素的不可变列表。
static <E> List<E> of(E e1, E e2, E e3) 返回一个包含三个元素的不可变列表。
static <E> List<E> of(E e1, E e2, E e3, E e4) 返回一个包含四个元素的不可变列表。
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5) 返回一个包含五个元素的不可变列表。
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6) 返回一个包含六个元素的不可变列表。
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) 返回一个包含七个元素的不可变列表。
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) 返回一个包含八个元素的不可变列表。
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) 返回一个包含九个元素的不可变列表。
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) 返回一个包含十个元素的不可变列表。

4 Java9 List的工厂方法案例

在Java 9中,我们可以借助List.of() 工厂方法以各种简单的方式编写此代码。

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.List;  
public class FactoryMethodsExample {  
    public static void main(String[] args) {  
        List<String> list = List.of("Java","JavaFX","Spring","Hibernate","JSP");  
        for(String l:list) {  
            System.out.println(l);  
        }  
    }  
}  

输出结果为:

Java
JavaFX
Spring
Hibernate
JSP

5 Java9 Set的工厂方法

Java Set接口提供了一个Set.of() 静态工厂方法,该方法用于创建不可变的set。用此方法创建的set实例具有以下特征。

  • 这是一成不变的
  • 没有空元素
  • 如果所有元素都是可序列化的,则它是可序列化的。
  • 没有重复的元素。
  • Set元素的迭代顺序未指定,可能会发生变化。

下表包含Set接口的工厂方法。

修饰符 方法 描述
static <E> Set<E> of() 返回一个包含零个元素的不可变集合。
static <E> Set<E> of(E e1) 返回一个包含一个元素的不可变集合。
static <E> Set<E> of(E... elements) 返回一个包含任意数量元素的不可变集合。
static <E> Set<E> of(E e1, E e2) 返回一个包含两个元素的不可变集合。
static <E> Set<E> of(E e1, E e2, E e3) 返回一个包含三个元素的不可变集合。
static <E> Set<E> of(E e1, E e2, E e3, E e4) 返回一个包含四个元素的不可变集合。
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5) 返回一个包含五个元素的不可变集合。
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6) 返回一个包含六个元素的不可变集合。
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) 返回一个包含七个元素的不可变集合。
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) 返回一个包含八个元素的不可变集合。
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) 返回一个包含九个元素的不可变集合。
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) 返回一个包含十个元素的不可变集合。

6 Java9 Set的工厂方法案例

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.Set;  
public class FactoryMethodsExample {  
    public static void main(String[] args) {  
        Set<String> set = Set.of("Java","JavaFX","Spring","Hibernate","JSP");  
        for(String l:set) {  
            System.out.println(l);  
        }  
    }  
}  

输出结果为:

Spring
JavaFX
JSP
Java
Hibernate

7 Java9 Map的工厂方法

在Java 9中,Map包含Map.of() 和Map.ofEntries() 静态工厂方法,这些方法提供了创建不可变Map的便捷方法。

这些方法创建的Map具有以下特征。

  • 这是一成不变的
  • 它不允许空键和值
  • 如果所有键和值都可序列化,则可序列化
  • 它在创建时拒绝重复的密钥
  • 映射的迭代顺序不确定,可能会发生变化。

下表包含Map接口的工厂方法。

修饰符 方法 描述
static <K,V> Map<K,V> of() 返回一个包含零映射的不可变映射。
static <K,V> Map<K,V> of(K k1, V v1) 返回一个包含单个映射的不可变映射。
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2) 返回一个包含两个映射的不可变映射。
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> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) 返回一个包含四个映射的不可变映射。
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) 返回一个包含五个映射的不可变映射。
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) 返回一个包含六个映射的不可变映射。
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) 返回一个包含七个映射的不可变映射。
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8) 返回一个包含八个映射的不可变映射。
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9) 返回一个包含九个映射的不可变映射。
static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10) 返回一个包含十个映射的不可变映射。
static <K,V> Map<K,V> ofEntries(Map.Entry<? extends K,? extends V>... entries) 返回一个不变的映射,其中包含从给定条目中提取的键和值。

8 Java9 Map的工厂方法案例1

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.Map;  
public class FactoryMethodsExample {  
    public static void main(String[] args) {  
        Map<Integer,String> map = Map.of(101,"JavaFX",102,"Hibernate",103,"Spring MVC");  
        for(Map.Entry<Integer, String> m : map.entrySet()){    
            System.out.println(m.getKey()+" "+m.getValue());  
        }  
    }  
}  

输出结果为:

102 Hibernate
103 Spring MVC
101 JavaFX

9 Java9 Map的工厂方法案例2

在Java 9中,除了静态Map.of() 方法之外,Map接口还包含一个静态方法Map.ofEntries() 。此方法用于创建Map.Entry实例的Map。

在以下示例中,我们将在多个map.entry实例的帮助下创建Map实例。

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.Map;  
public class FactoryMethodsExample {  
    public static void main(String[] args) {  
        // Creating Map Entry  
        Map.Entry<Integer, String> e1 = Map.entry(101, "Java");  
        Map.Entry<Integer, String> e2 = Map.entry(102, "Spring");  
        // Creating Map using map entries  
        Map<Integer, String> map = Map.ofEntries(e1,e2);  
        // Iterating Map   
        for(Map.Entry<Integer, String> m : map.entrySet()){    
            System.out.println(m.getKey()+" "+m.getValue());  
        }  
    }  
}  

输出结果为:

102 Spring
101 Java

 

热门文章

优秀文章