如何创建 Map
基础做法 Basic Approach
Map<String, String> emoji = new HashMap<>();
emoji.put("happy", "😄");
emoji.put("sad", "😭");
emoji.put("angry", "😡");
Java Collections
Collections.singletonMap("happy", "😄");
Java Stream API
Array
Map<String, String> emoji = Stream.of(new String[][]{
{"happy", "😄"},
{"sad", "😭"},
{"angry", "😡"},
}).collect(Collectors.toMap(data -> data[0], data -> data[1]));
SimpleEntry
Map<String, String> map = Stream.of (
new AbstractMap.SimpleEntry<>("happy", "😄"),
new AbstractMap.SimpleEntry<>("sad", "😭" ),
new AbstractMap.SimpleEntry<>("angry", "😡")
)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
SimpleImmutableEntry
Map<String, String> map = Stream.of(
new AbstractMap.SimpleImmutableEntry<>("happy", "😄"),
new AbstractMap.SimpleImmutableEntry<>("sad", "😭" ),
new AbstractMap.SimpleImmutableEntry<>("angry", "😡"))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
UnmodifiableMap
Map<String, String> emoji = Stream.of(new String[][] {
{"happy", "😄"},
{"sad", "😭"},
{"angry", "😡"},
}).collect(Collectors.collectingAndThen(
Collectors.toMap(data -> data[0], data -> data[1]),
Collections::<String, String> unmodifiableMap));
Java 9 Map.of()
Java 9 引入的 Map.of() 支持从 0 到 10 个元素对。
Map<String, String> emptyMap = Map.of();
Map<String, String> singletonMap = Map.of("happy", "😄");
Map<String, String> map = Map.of("happy", "😄", "sad", "😭", "angry", "😡");
又或者 Map.ofEntries()。
Map<String, String> map = Map.ofEntries(
new AbstractMap.SimpleEntry<>("happy", "😄"),
new AbstractMap.SimpleEntry<>("sad", "😭"),
new AbstractMap.SimpleEntry<>("angry", "😡")
);
Guava
Map<String, String> emoji
= ImmutableMap.of("happy", "😄", "sad", "😭", "angry", "😡");
双花括号初始化 Double Brace Syntax
Map<String, String> emoji = new HashMap<>() {{
put("happy", "😄");
put("sad", "😭");
put("angry", "😡");
}};
这个方法很少见,同时非常不建议使用。 由于其实现原理会持有外部类引用,很容易造成内存泄露。 放这里就当笑话看吧。