原文:http://zetcode.com/articles/jep269/

本文介绍了 JDK 9 中引入的用于集合的便捷工厂方法。JEP(Java 增强过程)269 引入了新的 API,以使创建具有少量元素的集合和映射实例更加方便。

目的是减轻 Java 编程语言中没有集合字面值的痛苦。 故意将 API 保持为最小。

它在ListSetMap接口上包含新的静态工厂方法,用于创建集合的不可修改实例。

安装 JDK 9 EA

我们从 jdk9.java.net/download/ 下载 JDK 9 早期访问。

  1. $ tar vzfx jdk-9-ea+131_linux-x64_bin.tar.gz

在 Linux 上,我们解压缩jdk-9-ea+131_linux-x64_bin.tar.gz文件。

  1. $ cd jdk-9/
  2. $ ./bin/java -version
  3. java version "9-ea"
  4. Java(TM) SE Runtime Environment (build 9-ea+131)
  5. Java HotSpot(TM) 64-Bit Server VM (build 9-ea+131, mixed mode)

我们移至根目录并显示 Java 版本。

目前,NetBeans 和 Eclipse 都不支持 JDK 9。 因此,我们将从命令行运行示例。

有三种新的静态重载方法:

  • List.of()
  • Set.of()
  • Map.of()

该方法创建各个集合的不可修改实例。

列表示例

第一个示例使用新的 API 创建一个列表。 列表是一个简单的有序集合,允许重复的元素。

  1. $ tree
  2. .
  3. └── com
  4. └── zetcode
  5. └── ListExample.java
  6. 2 directories, 1 file

我们有这个项目目录结构。

ListExample.java

  1. package com.zetcode;
  2. import java.util.List;
  3. public class ListExample {
  4. public static void main(String[] args) {
  5. List<String> fruits = List.of("apple", "banana", "plum", "lemon");
  6. System.out.println(fruits);
  7. String[] items = {"coin", "pen", "bottle", "spoon"};
  8. List<String> listOfItems = List.of(items);
  9. System.out.println(listOfItems);
  10. }
  11. }

在示例中,我们使用新的List.of()方法调用创建了两个字符串列表。

  1. List<String> fruits = List.of("apple", "banana", "plum", "lemon");

创建一个新列表。 这些项目被指定为List.of()参数。

  1. String[] items = {"coin", "pen", "bottle", "spoon"};
  2. List<String> listOfItems = List.of(items);

List.of()也可以将数组作为参数。

  1. $ ~/bin/jdk1.9/bin/javac -d bin com/zetcode/ListExample.java

我们编译代码示例。 二进制文件放入bin目录。

  1. $ ~/bin/jdk1.9/bin/java -cp bin com.zetcode.ListExample
  2. [apple, banana, plum, lemon]
  3. [coin, pen, bottle, spoon]

我们运行示例。 这两个列表将打印到控制台。

集合示例

在下面的示例中,我们显示了Set集合的新 API。 集合是不包含重复元素的集合。

SetExample.java

  1. package com.zetcode;
  2. import java.util.Set;
  3. import java.util.TreeSet;
  4. public class SetExample {
  5. public static void main(String[] args) {
  6. Set<String> colours = Set.of("blue", "red", "green", "yellow");
  7. System.out.println(colours);
  8. String[] names = {"Jane", "Paul", "Robin", "Susan",
  9. "Monica", "Jan", "Peter"};
  10. TreeSet<String> setOfnames = new TreeSet<String>(Set.of(names));
  11. System.out.println(setOfnames);
  12. }
  13. }

创建两个集合; 第二个按字母顺序排序。

  1. Set<String> colours = Set.of("blue", "red", "green", "yellow");

通过Set.of()方法调用创建一个新集合。

  1. String[] names = {"Jane", "Paul", "Robin", "Susan",
  2. "Monica", "Jan", "Peter"};
  3. TreeSet<String> setOfnames = new TreeSet<String>(Set.of(names));

要创建排序集,我们将创建的集传递给TreeSet

  1. $ ~/bin/jdk1.9/bin/javac -d bin com/zetcode/SetExample.java
  2. $ ~/bin/jdk1.9/bin/java -cp bin com.zetcode.SetExample
  3. [yellow, red, green, blue]
  4. [Jan, Jane, Monica, Paul, Peter, Robin, Susan]

我们编译并运行该示例。

映射示例

接下来的两个示例展示了Map集合的新 API。 映射是一个包含唯一键/值对的集合。

MapExample.java

  1. package com.zetcode;
  2. import java.util.Map;
  3. public class MapExample {
  4. public static void main(String[] args) {
  5. Map<String, Integer> items = Map.of("coins", 12, "chairs", 4, "pens", 2);
  6. items.entrySet().stream().forEach(System.out::println);
  7. }
  8. }

Map.of()方法使用两个键值对创建一个新映射。

  1. $ ~/bin/jdk1.9/bin/javac -d bin com/zetcode/MapExample.java
  2. $ ~/bin/jdk1.9/bin/java -cp bin com.zetcode.MapExample
  3. coins=12
  4. chairs=4
  5. pens=2

我们编译并运行该程序。

在第二个示例中,我们使用Map.entry()创建映射元素。 映射条目是一个键值对。

MapExample2.java

  1. package com.zetcode;
  2. import java.util.Map;
  3. import static java.util.Map.entry;
  4. public class MapExample2 {
  5. public static void main(String[] args) {
  6. Map<Integer,String> map = Map.ofEntries(
  7. entry(1, "A"),
  8. entry(2, "B"),
  9. entry(3, "C"),
  10. entry(4, "D")
  11. );
  12. map.entrySet().stream().forEach(System.out::println);
  13. }
  14. }

使用Map.ofEntries()方法创建一个新的条目映射。

  1. $ ~/bin/jdk1.9/bin/javac -d bin com/zetcode/MapExample2.java
  2. $ ~/bin/jdk1.9/bin/java -cp bin com.zetcode.MapExample2
  3. 1=A
  4. 2=B
  5. 3=C
  6. 4=D

We compile and run the program.

在本文中,我们研究了即将发布的 JDK 9 中的新集合 API。

您可能也对以下相关教程感兴趣: Java 教程Java 局部变量类型推断用 Java8 的StringJoiner连接字符串Google Guava