在一行中创建并填充TreeMap

时间:2013-11-13 21:11:22

标签: java android

像数组new Integer[]{ 1, 2, 3 }一样,我可以只使用一行创建和填充TreeMap吗?

// I want to use it in situations like this:
this.lookFor( new TreeMap( {...} ) );

HashMapLinkedHashMap也有机会吗?

4 个答案:

答案 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
        */
    }
});