有没有办法同时使用键和值创建映射(我的意思是一行代码)?例如,我创建了一个名为 map 的映射,每当我想添加一对新的键/值时,我都需要使用“put”方法。当我们创建地图时,是否有更短的方法来填充地图?
Map<String, String> map = new HashMap<String, String>();
map.put("A", "32");
map.put("C", "34");
map.put("T", "53");
Run Code Online (Sandbox Code Playgroud)
Phi*_*zen 12
Map<String, String> map = Collections.singletonMap("A", "32");
Run Code Online (Sandbox Code Playgroud)
Map<String, String> map = Collections.emptyMap();
Run Code Online (Sandbox Code Playgroud)
假设您的数据ArrayList位于包含可以使用任意 getter 访问的对象中Data,您可以使用 Streams API:
List<Data> dataList = new ArrayList<>();
// .... populate data list
Map<String, Integer> nameToAge = dataList.stream().collect(
Collectors.toMap(Data::getFooAsKey, Data::getBarAsValue)
);
Run Code Online (Sandbox Code Playgroud)
...或使用内联地图方法(如果您没有/需要/想要创建dataList):
Map<String, Integer> map = Stream.of(
new Data("A", "32"), new Data("C", "34"), new Data("C", "34")
).collect(Collectors.toMap(User::getFooAsKey, User::getBarAsValue));
Run Code Online (Sandbox Code Playgroud)
Map<String, String> map = new HashMap<String, String>() {{
put("A", "32");
put("C", "34");
put("T", "53");
}};
Run Code Online (Sandbox Code Playgroud)
由于此方法可能会导致内存泄漏,因此强烈建议不要这样做。
Map<String, String> immutableMap = Maps.newHashMap(
ImmutableMap.of("A", "32", "C", "34", "T", "53")
);
Run Code Online (Sandbox Code Playgroud)
从 Java 9 开始,可以使用高级语法糖,如David 的回答中所述。
在Java 9中,JEP 269: Convenience Factory Methods for Collections定义了一些新的 Map helper 方法。
Map<String, String> map = Map.of("A", "32", "C", "34", "T", "53");
Run Code Online (Sandbox Code Playgroud)
但这仅适用于最多 10 个条目。十个以上,使用:
import static java.util.Map.entry;
Map<String, String> map = Map.ofEntries(
entry("A", "32"), entry("C", "34"), entry("T", "53"));
Run Code Online (Sandbox Code Playgroud)
如果您需要在早期版本中这样做,您可以编写类似的辅助方法。