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
热门文章
优秀文章