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

Initialize Map<String, Object> instance from Map entries

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

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

我收到这个错误:

Cannot resolve method 'of(java.util.Map.Entry, java.util.Map.Entry, java.util.Map.Entry)'

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

从 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 建议

简单的答案是:

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>

替换

Map.of(a,b,c); 

Map.ofEntries(a,b,c);

如果您仍想使用 Map.of(),则应明确粘贴键和值。

Map.Entry() returns an immutable Map.Entry containing the given key and value. These entries are suitable for populating Map instances using the Map.ofEntries() method.

使用这个

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

而不是

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

从条目创建地图使用:

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());