从 Map 条目初始化 Map<String, Object> 实例

13

假设我有一些地图条目,像这样:

var a = Map.entry("a", new Object());
var b = Map.entry("b", new Object());
var c = Map.entry("c", new Object());

var m = Map.of(a,b,c);  // error here

我遇到了这个错误:

无法解决方法'of(java.util.Map.Entry, java.util.Map.Entry, java.util.Map.Entry)'

我只想从一个地图中的条目创建一个新地图,我该怎么做? 问题不是如何初始化给定Map.Entry实例的Map。


1
我认为Map.ofEntries就足够了。令人惊讶的是,Map.of没有重载以支持entries,但我猜我知道原因。 - user1604294
1
@RobbyCornelissen 这是Java 11版本,引入了var关键字,请注意。 - user1604294
5
更准确地说,是“Java 9”。 - Vishwa Ratna
2
@CommonMan,“var”关键字是在Java 10中引入的,而不是Java 9。 - Mark Rotteveel
1
你很幸运,因为你向 Map.of 传递了奇数个参数。如果你传递了偶数个参数,m 将成为一个条目到条目的映射,具体来说是 Map<Map.Entry<String,Object>,Map.Entry<String,Object>> - Stuart Marks
显示剩余2条评论
5个回答

17
Map.of(a,b,c); 

使用

Map.ofEntries(a,b,c);
如果你仍然想使用Map.of(),那么你应该明确地粘贴键和值。

Map.Entry() 返回一个包含给定键和值的不可变的Map.Entry。这些条目适用于使用Map.ofEntries()方法填充Map实例。

何时使用Map.of()以及何时使用Map.ofEntries()


4

从jdk-9开始,您可以使用Map.of()创建具有键值对的Map

Map<String, Object> map = Map.of("a", new Object(), "b", new Object(), "c", new Object());

同时,还可以使用SimpleEntry

Map<String, Object> map = Map.ofEntries(
  new AbstractMap.SimpleEntry<>("a", new Object()),
  new AbstractMap.SimpleEntry<>("b", new Object()),
  new AbstractMap.SimpleEntry<>("c", new Object()));

通过使用Map.ofEntries OP建议来实现。

Map.ofEntries 是我正在寻找的。 - user1604294

3
简单的回答是:
var a = Map.entry("a", new Object());
var b = Map.entry("b", new Object());
var c = Map.entry("c", new Object());

var m = Map.ofEntries(a,b,c);  // ! use Map.ofEntries not Map.of

Map.entry(key,val) 的类型是 Map.Entry<K,V>,如果你想知道的话。

2
最初的回答
使用此代码
var m = Map.ofEntries(a, b, c);

最初的回答

而不是

var m = Map.of(a,b,c);

2

To create a map from entries Use either:

var a = Map.entry("a", new Object());
var b = Map.entry("b", new Object());
var c = Map.entry("c", new Object());

var m = Map.ofEntries(a,b,c);

或者:

var m = Map.ofEntries(
             entry("a", new Object()),
             entry("b", new Object()),
             entry("c", new Object()));

你也可以不必显式地创建条目来创建地图:
var m = Map.of("a", new Object(),
               "b", new Object(),
               "c", new Object());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接