JAVA map entry节_Java 9:Immutable Map and Map.Entry的工厂方法详解

介绍

Oracle 在2017年3月左右发布Java新版本:Java SE9。陆续我会发表一系列有关Java SE 9新功能的文章。这是本系列的第五篇。

我已经发表了几篇有关Java SE 9新特性的文章。在阅读这篇文章之前,请先阅读以下文章:

在本文中,我将带着大家一起来讨论一下Java SE 9新功能:Immutable Map 和 Map.Entry的工厂方法,并提供一些简单而合适的示例。

Java SE 9中的不可变列表,集合和映射所提供的工厂方法都是静态方法。

Java SE 8:空的不可变 Map

现在,我们来看看如何在Java SE 8和更早版本中创建Empty Immutable Map。如果我们要创建一个空的不可变或不可修改的Map,则可以使用Collections类的静态方法:unmodifiableMap,如下所示:

Map emptyMap = new HashMap<>();

Map immutableEmptyMap = Collections.unmodifiableMap(emptyMap);

让我们使用Java REPL来测试以下代码:

jshell> Map emptyMap = new HashMap<>()

emptyMap ==> {}

jshell> Map immutableEmptyMap = Collections.unmodifiableMap(emptyMap)

immutableEmptyMap ==> {}

上述,我们可以看到创建一个简单的空映射是如此的繁琐且冗长。现在让我们在Java SE 9中看看该如何操作。

Java SE 9:创建空的不可变Map

为了克服这些缺点,Java SE 9引入了两组有用的重载方法。

Map.of()

Map.ofEntries()

在本节中,我们先来讨论第一套方法,即Map.of()方法,并在下一节中介绍下一套方法。

查阅Java SE 9 Map API,我们可以在Map界面中找到以下方法。

static Map of()

此方法用于创建一个空的不可变映射,该映射是Java SE 9中零元素的映射。

jshell> Map emptyImmutableMap = Map.of()

emptyImmutableMap ==> {}

在这里我们可以看到,在Java SE 9中创建一个空的不可变映射是非常简单的。

Java SE 8: 非空不可变 Map

在本节中,我们将看到如何在Java SE 8和早期版本中创建非空的不可变Map。

我们可以使用Collections.unmodifiableMap静态方法来创建非空的不可变Map,如下所示:

Map nonemptyMap = new HashMap<>();

nonemptyMap.put(1,"one")

nonemptyMap.put(2,"two")

nonemptyMap.put(3,"three")

Map immutableNonEmptyMap = Collections.unmodifiableMap(nonemptyMap);

上面我们还可以观察到,要创建一个非空的不可变Map是非常繁琐,冗长的。下面接下来让我们在Java SE 9中看看如何简化操作。

jshell> Map nonemptyMap = new HashMap<>()

nonemptyMap ==> {}

jshell> nonemptyMap.put(1,"one")

$2 ==> null

jshell> nonemptyMap.put(2,"two")

$3 ==> null

jshell> nonemptyMap.put(3,"three")

$4 ==> null

onemptyMap) immutableNonEmptyMap = Collections.unmodifiableMap(n

immutableNonEmptyMap ==> {1=one, 2=two, 3=three}

jshell> nonemptyMap

nonemptyMap ==> {1=one, 2=two, 3=three}

Java SE 9:利用Map.of() 创建可变非空Map

在本节中,我们将讨论如何使用Java SE 9 的 of()重载方法来创建不可变的非空Map。如果我们浏览Java SE 9 API文档,我们可以在Map界面中看到以下方法。

static Map of(K k1, V v1)

static Map of(K k1, V v1, K k2, V v2)

static Map of(K k1, V v1, K k2, V v2, K k3, V v3)

static Map of(K k1, V v1, K k2, V v2, K k3, V v3)

static Map of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4)

static Map of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)

static Map 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 Map 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 Map 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 Map 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 Map 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)

这些实用的方法用于创建一个新的非空0到10个不等元素的不可变Map。

static Map of(K k1, V v1)

示例:

jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three")

nonemptyImmutableMap ==> {2=two, 3=three, 1=one}

在这里我们可以看到,在Java SE 9中创建一个空的和非空的不可变Map是非常容易的。

Java SE 9:Map.ofEntries() 方法

众所周知,Java SE 9引入了两组Map 方法来创建不可变的Map:of和ofEntries。在前面的部分中,我们已经讨论过Map.of()方法。在本节中,我们将讨论如何使用Map.ofEntries()来创建空或非空Map。

Map.ofEntries()方法用于Entry来创建不可变或不可修改的Map。

如果我们通过Java SE 9 Map API,我们可以在Map界面中找到以下方法。

static Map ofEntries(Map.Entry extends K,? extends V>... entries)

这个可变参数方法对于使用Entries创建具有零个或一个或多个元素的Immutable Map很有用。我们可以使用Map.entry()用方法来创建Entries。请参阅下一节以了解此Map.entry()方法。

示例:

jshell> Map emptyImmutableMap = Map.ofEntries()

emptyImmutableMap ==> {}

使用这个方法来创建一个零元素的Immutable Map。

import static java.util.Map.entry

jshell> Map emptyImmutableMap = Map.ofEntries(entry(1,"one"),

...> entry(2,"two"), entry(3,"three"))

emptyImmutableMap ==> {1=one, 2=two, 3=three}

这种方法用于使用Entries创建一个或多个元素的Immutable Map。

Java SE 9:Map.entries() 方法

如前一节所述,我们可以使用Map.entry()方法并给定的键值对创建不可变的Map.Entry。 如上例所示,它用作Map.ofEntries()方法的一部分来创建不可变地图。

static Map.Entry entry(K k, V v)

示例:

jshell> Map.Entry immutableMapEntry1 = Map.entry(1,"one")

immutableMapEntry1 ==> 1=one

jshell> Map.Entry immutableMapEntry2 = Map.entry(2,"two")

immutableMapEntry2 ==> 2=two

jshell> Map.Entry immutableMapEntry3 = Map.entry(3,"three")

immutableMapEntry3 ==> 3=three

在这里,我们创建了三个Immutable Map.Entry对象。使用这些Entry对象,我们可以创建一个不可变映射,如下所示:

jshell> Map immutableMap = Map.ofEntries(immutableMapEntry1,

...> immutableMapEntry2, immutableMapEntry3)

immutableMap ==> {3=three, 2=two, 1=one}

Immutable Map的特征类似于Immutable List。您可以在这里详细找到这些信息:Java 9:Immutable List的工厂方法详解。

以上就是Java 9:Immutable Map and Map.Entry的工厂方法详解的基本概念。我们将在以后的文章中讨论更多Java SE 9新功能。

感谢阅读。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值