本文介绍了 JDK 9 中引入的用于集合的便捷工厂方法。JEP(Java 增强过程)269 引入了新的 API,以使创建具有少量元素的集合和映射实例更加方便。
目的是减轻 Java 编程语言中没有集合文字的痛苦。 故意将 API 保持为最小。
它在List
,Set
和Map
接口上包含新的静态工厂方法,用于创建集合的不可修改实例。
安装 JDK 9 EA
我们从 jdk9.java.net/download/ 下载 JDK 9 早期访问。
$ tar vzfx jdk-9-ea+131_linux-x64_bin.tar.gz
在 Linux 上,我们解压缩jdk-9-ea+131_linux-x64_bin.tar.gz
文件。
$ cd jdk-9/
$ ./bin/java -version
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+131)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+131, mixed mode)
我们移至根目录并显示 Java 版本。
目前,NetBeans 和 Eclipse 都不支持 JDK 9。 因此,我们将从命令行运行示例。
有三种新的静态重载方法:
- 列表()
- Set.of()
- Map.of()
该方法创建各个集合的不可修改实例。
列表示例
第一个示例使用新的 API 创建一个列表。 列表是一个简单的有序集合,允许重复的元素。
$ tree
.
└── com
└── zetcode
└── ListExample.java
2 directories, 1 file
我们有这个项目目录结构。
ListExample.java
package com.zetcode;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
List<String> fruits = List.of("apple", "banana", "plum", "lemon");
System.out.println(fruits);
String[] items = {"coin", "pen", "bottle", "spoon"};
List<String> listOfItems = List.of(items);
System.out.println(listOfItems);
}
}
在示例中,我们使用新的List.of()
方法调用创建了两个字符串列表。
List<String> fruits = List.of("apple", "banana", "plum", "lemon");
创建一个新列表。 这些项目被指定为List.of()
参数。
String[] items = {"coin", "pen", "bottle", "spoon"};
List<String> listOfItems = List.of(items);
List.of()
也可以将数组作为参数。
$ ~/bin/jdk1.9/bin/javac -d bin com/zetcode/ListExample.java
我们编译代码示例。 二进制文件放入bin
目录。
$ ~/bin/jdk1.9/bin/java -cp bin com.zetcode.ListExample
[apple, banana, plum, lemon]
[coin, pen, bottle, spoon]
我们运行示例。 这两个列表将打印到控制台。
集合示例
在下面的示例中,我们显示了Set
集合的新 API。 集合是不包含重复元素的集合。
SetExample.java
package com.zetcode;
import java.util.Set;
import java.util.TreeSet;
public class SetExample {
public static void main(String[] args) {
Set<String> colours = Set.of("blue", "red", "green", "yellow");
System.out.println(colours);
String[] names = {"Jane", "Paul", "Robin", "Susan",
"Monica", "Jan", "Peter"};
TreeSet<String> setOfnames = new TreeSet<String>(Set.of(names));
System.out.println(setOfnames);
}
}
创建两个集合; 第二个按字母顺序排序。
Set<String> colours = Set.of("blue", "red", "green", "yellow");
通过Set.of()
方法调用创建一个新集合。
String[] names = {"Jane", "Paul", "Robin", "Susan",
"Monica", "Jan", "Peter"};
TreeSet<String> setOfnames = new TreeSet<String>(Set.of(names));
要创建排序集,我们将创建的集传递给TreeSet
。
$ ~/bin/jdk1.9/bin/javac -d bin com/zetcode/SetExample.java
$ ~/bin/jdk1.9/bin/java -cp bin com.zetcode.SetExample
[yellow, red, green, blue]
[Jan, Jane, Monica, Paul, Peter, Robin, Susan]
我们编译并运行该示例。
映射示例
接下来的两个示例展示了Map
集合的新 API。 映射是一个包含唯一键/值对的集合。
MapExample.java
package com.zetcode;
import java.util.Map;
public class MapExample {
public static void main(String[] args) {
Map<String, Integer> items = Map.of("coins", 12, "chairs", 4, "pens", 2);
items.entrySet().stream().forEach(System.out::println);
}
}
Map.of()
方法使用两个键值对创建一个新映射。
$ ~/bin/jdk1.9/bin/javac -d bin com/zetcode/MapExample.java
$ ~/bin/jdk1.9/bin/java -cp bin com.zetcode.MapExample
coins=12
chairs=4
pens=2
我们编译并运行该程序。
在第二个示例中,我们使用Map.entry()
创建映射元素。 映射条目是一个键值对。
MapExample2.java
package com.zetcode;
import java.util.Map;
import static java.util.Map.entry;
public class MapExample2 {
public static void main(String[] args) {
Map<Integer,String> map = Map.ofEntries(
entry(1, "A"),
entry(2, "B"),
entry(3, "C"),
entry(4, "D")
);
map.entrySet().stream().forEach(System.out::println);
}
}
使用Map.ofEntries()
方法创建一个新的条目映射。
$ ~/bin/jdk1.9/bin/javac -d bin com/zetcode/MapExample2.java
$ ~/bin/jdk1.9/bin/java -cp bin com.zetcode.MapExample2
1=A
2=B
3=C
4=D
We compile and run the program.
在本文中,我们研究了即将发布的 JDK 9 中的新集合 API。