2016-11-06 46 views
5

我有下面的代碼:Arrays.asList也適用於地圖?

Map<String, Map<Double, String>> map = new HashMap<>(); 
Map<Double,String> Amap = new HashMap<>(); 
map.put(getValuesTypes.FUT(), 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#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"); 
}}); 

雖然不建議。我會建議使用番石榴的ImmutableMap

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

如果多對超過5更大,你應該用自己的builder

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); }};