2016-11-06 4 views
5

私は以下のコードがあります:最初の地図を作成するのではなく、Arrays.asListも地図ですか?

Map<String, Map<Double, String>> map = new HashMap<>(); 
Map<Double,String> Amap = new HashMap<>(); 
map.put(getValuesTypes.FUT(), HERE); 

をし、「HERE」でそれを入れて、私は私が私ができることListArrays.asList(...) で使用できるように機能を探しています入力してください"Here" ?.asMap({1.0,"A"}, {2.0,"B"})

+0

'{1.0、" A "}はマップではなくオブジェクト配列です –

+1

Java 9では、不変のマップを作成するためのコレクションファクトリメソッドを使用することができます。http://download.java.net/ java/jdk9/docs/api/java/util/Map.html#of-KV-とその亜種 – Tordanik

答えて

4

HashMapのように初期化することができます。

new HashMap<Double, String>() { 
    { 
     put(1.0, "ValA"); 
     put(2.0, "ValB"); 
    } 
}; 
+1

余分なマップインスタンスを作成するコストが隠されていることに注意してください。ダブルブレースの初期化と呼ばれます。 – jakubbialkowski

1

このようにマップを初期化するリテラルはありません。しかし、その場で生成する匿名クラスを使用することができます:

map.put(getValuesTypes.FUT(), new HashMap<Double, String>() {{ 
    put(1.0, "A"); 
    put(2.0, "B"); 
}}); 

ただし、お勧めしません。

map.put(getValuesTypes.FUT(), ImmutableMap.<Double, String>of(1.0, "A", 2.0, "B")); 

ペアの数が5よりも大きい場合は、あなたが彼らのbuilderを使用する必要があります:私は、グアバのImmutableMapを使用することをお勧め

map.put(getValuesTypes.FUT(), 
     ImmutableMap.<Double, String>builder().put(1.0, "A")/* 5+ puts */.build()); 
+0

余分なライブラリをインポートする必要なく、 'Collections.unmodifiableMap(myHashMapInstance)'のように 'java.util.Collections'を使うことができます – Jaxon

2

Guava

Map<Double, String> map = ImmutableMap.of(1.0, "A", 2.0, "B"); 
0

をあなたができるだけで匿名クラスを使用して新しいマップを初期化します。すなわち

new HashMap<K, V>() {{ put(key, value); put(key, value); }};

1

グアバのImmutableMap.of(..)はこの方向に助けることができる:

ImmutableMap.of(1, "a"); 

JDKでしかないCollections.singletonMap(..)はあるが、これはあなたの唯一のペアを持つだけでマップを提供します。

Maps.asMap(Object... varArgs)を含むguava projectにはdiscussionがありましたが、ビットが停止しました。それで、ImmutableMap.of(...)が行く方法です。