在Java

时间:2017-02-07 22:29:28

标签: java dictionary

有没有办法同时创建一个包含键和值的地图(我的意思是一行代码)?例如,我创建了一个名为map的地图,每当我想添加一对新的键/值时,我需要使用方法“put”。在创建地图时是否有更短的方式来填充地图?

Map<String, String> map = new HashMap<String, String>();
    map.put("A", "32");
    map.put("C", "34");
    map.put("T", "53");

2 个答案:

答案 0 :(得分:3)

Java 9中有一些new Map helper methods

Map<String, String> map = Map.of("A", "32", "C", "34", "T", "53");

但这仅适用于最多10个条目。不仅如此,请使用:

import static java.util.Map.entry;

Map<String, String> map = Map.ofEntries(
    entry("A", "32"), entry("C", "34"), entry("T", "53"));

如果您需要在早期版本中执行此操作,则可以编写类似的辅助方法。

答案 1 :(得分:1)

在 Java 8 中,您可以使用以下 explained here 方法:

如果你只需要一个快速不可变的单入口或空地图)

Map<String, String> map = Collections.singletonMap("A", "32");
Map<String, String> map = Collections.emptyMap();

使用流

假设您的数据位于 ArrayList 对象中,这些对象包含您的 Data,可以使用任意 getter 访问,您可以使用 Streams API:

List<Data> dataList = new ArrayList<>();
// .... populate data list
Map<String, Integer> nameToAge = dataList.stream().collect(
    Collectors.toMap(Data::getFooAsKey, Data::getBarAsValue)
);

...或使用内联地图方法(如果您没有/需要/想要创建 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));

匿名子类(不鼓励)

Map<String, String> map = new HashMap<String, String>({{
    put("A", "32");
    put("C", "34");
    put("T", "53");
}});

由于此方法可能导致内存泄漏,因此强烈不建议使用。

使用番石榴

Map<String, String> mutuableMap = Maps.newHashMap(
    ImmutableMap.of("A", "32", "C", "34", "T", "53")
);