3

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

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

有机会吗HashMapLinkedHashMap

4

4 回答 4

9

没有专门用于初始化地图的内置语法。但是,您可以利用称为“双括号初始化”的特殊语法。

Map<String, Integer> map = new TreeMap<String, Integer>() {{ put("one", 1); put("two", 2); put("three", 3); }};

外面的一对大括号意味着你正在声明和初始化一个匿名的内部类,它是 extends TreeMap。内部的大括号对表示实例初始化程序,即在创建实例时运行的代码。

于 2013-11-13T21:18:51.987 回答
2

大括号符号在

new Integer[]{ 1, 2, 3 }

是数组类型的特殊符号。

大括号符号在

new TreeMap( {...} )

不会编译。

大括号符号在

new TreeMap(  ) {}

创建 的匿名子类TreeMap。您可以做的是执行此操作,然后立即使用实例初始化程序将内容添加到Map.

new TreeMap() {{this.put(1,2);}}

显然,使用适用于您的用例的类型。

这称为双括号初始化。

于 2013-11-13T21:19:20.157 回答
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)
   ));
于 2021-04-29T13:55:40.683 回答
-1

我认为您可以使用此示例代码

this.lookFor(new TreeMap<Object,Object>(){
    @Override 
    public boolean isEmpty() {
        /*
        *some code
        */
    }
});
于 2013-11-13T21:16:34.143 回答