像数组new Integer[]{ 1, 2, 3 }
一样,我可以只使用一行创建和填充TreeMap吗?
// I want to use it in situations like this:
this.lookFor( new TreeMap( {...} ) );
HashMap
或LinkedHashMap
也有机会吗?
答案 0 :(得分:5)
没有内置语法专门初始化地图。但是,您可以利用称为“双括号初始化”的特殊语法。
Map<String, Integer> map = new TreeMap<String, Integer>() {{ put("one", 1); put("two", 2); put("three", 3); }};
外部大括号意味着您声明并初始化TreeMap
{{1}}。内部大括号代表anonymous inner class,代码在创建实例时运行。
答案 1 :(得分:2)
中的括号表示法
new Integer[]{ 1, 2, 3 }
是数组类型的特殊表示法。
中的括号表示法
new TreeMap( {...} )
不会编译。
中的括号表示法
new TreeMap( ) {}
创建TreeMap
的匿名子类。你可以做的就是这样做,然后立即使用实例初始化器将内容添加到Map
。
new TreeMap() {{this.put(1,2);}}
显然,请使用适用于您的用例的类型。
这称为双括号初始化。
答案 2 :(得分:0)
我是这样做的:
import java.util.*;
import java.util.Map.Entry;
import static java.util.Map.entry;
...
public class MyClass {
private static final SortedMap<String, String> MY_MAP = Stream.of(
entry("key1", "value1"),
entry("key2", "value2"),
...,
entry("keyN", "valueN")
).collect(toMap(
Entry::getKey,
Entry::getValue,
(v1, v2) -> v2,
() -> new TreeMap<>(String.CASE_INSENSITIVE_ORDER)
));
答案 3 :(得分:-1)
我认为您可以使用此示例代码
this.lookFor(new TreeMap<Object,Object>(){
@Override
public boolean isEmpty() {
/*
*some code
*/
}
});