是否有可能在Java中,使與它裏面已經聲明中有關項目的字典?就像下面的C#代碼:C#與Java - 字典?
Dictionary<string, int> d = new Dictionary<string, int>()
{
{"cat", 2},
{"dog", 1},
{"llama", 0},
{"iguana", -1}
};
我該怎麼做,我使用什麼類型?我讀過那本詞典已經過時了。
是否有可能在Java中,使與它裏面已經聲明中有關項目的字典?就像下面的C#代碼:C#與Java - 字典?
Dictionary<string, int> d = new Dictionary<string, int>()
{
{"cat", 2},
{"dog", 1},
{"llama", 0},
{"iguana", -1}
};
我該怎麼做,我使用什麼類型?我讀過那本詞典已經過時了。
這會做你想要什麼:
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("cat", 2);
put("dog", 1);
put("llama", 0);
put("iguana", -1);
}};
此語句創建的HashMap中,一個匿名子類,其中從父類唯一的區別是,在實例創建過程中添加了4個條目。這是在Java世界中相當常見的成語(雖然有些人覺得它有爭議的,因爲它會創建一個新的類定義)。
由於這種爭議,因爲Java 9的有一種方便的地圖構建一個新成語:靜態Map.of methods家庭。
在Java 9或更高您可以創建所需的地圖如下:
Map<String, Integer> map = Map.of(
"cat", 2,
"dog", 1,
"llama", 0,
"iguana", -1
);
對於較大的地圖,這alternative syntax可以是不易出錯:
Map<String, Integer> map = Map.ofEntries(
Map.entry("cat", 2),
Map.entry("dog", 1),
Map.entry("llama", 0),
Map.entry("iguana", -1)
);
(這是特別如果Map.entry是靜態導入的,而不是被顯式引用的話,那就很好)。
而且只能在Java 9+工作,這些新方法都不太等同於前一個:
然而,這些分歧不應該的問題對於很多使用情況,使之成爲一個很好的默認方式爲更新版本的Java。
Map<String,Integer> map = new HashMap<String, Integer>(){{
put("cat", 2);
put("dog", 1);
put("llama", 0);
put("iguana", -1);
}};
哇有人已經發布了這個...... – fireshadow52
這不能編譯,你的答案在編輯之前是正確的。 – Affe
咬住子彈並輸入地圖名稱!
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("cat", 2);
map.put("dog", 1);
map.put("llama", 0);
map.put("iguana", -1);
你也可以做這樣的事情,這可能會節省一些打字一個長長的清單:
Object[][] values = {
{"cat", 2},
{"dog", 1},
{"llama", 0},
{"iguana", -1}
};
for (Object[] o : values) {
map.put((String) o[0], (Integer) o[1]);
}
不行!太多打字。 :P – WildBamaBoy
Java7幾乎介紹了「收集的文字」,將允許語法這樣。他們可能會試圖用Java8推它。我不知道這些人有什麼問題。
這可以通過某種形式的封裝API
Map<String,Integer> map = Maps.<String,Integer>empty()
.put("cat", 2).put("dog",1)....;
差不太多可以輕鬆實現。我寧願像
map("cat", "dog", ...)
.to( 1, 2, ...);
這種事情必須由不同的人來實現,不幸的是,標準的API不inculde這樣的事情。
如果使用Guava library,則可以使用其ImmutableMap
類,通過其自身(實施例1和2),或作爲一個HashMap的初始化(實施例3和4):
Map<String, Integer> map1 = ImmutableMap.<String, Integer> builder()
.put("cat", 2)
.put("dog", 1)
.put("llama", 0)
.put("iguana", -1)
.build();
Map<String, Integer> map2 = ImmutableMap.of(
"cat", 2,
"dog", 1,
"llama", 0,
"iguana", -1
);
Map<String, Integer> map3 = Maps.newHashMap(
ImmutableMap.<String, Integer> builder()
.put("cat", 2)
.put("dog", 1)
.put("llama", 0)
.put("iguana", -1)
.build()
);
Map<String, Integer> map4 = Maps.newHashMap(ImmutableMap.of(
"cat", 2,
"dog", 1,
"llama", 0,
"iguana", -1)
);
實際上它。謝謝。 – WildBamaBoy
這裏是對這是做什麼的解釋。 http://techpolesen.blogspot.com/2007/08/java-initializers-add-elements-to.html –
嗯...雙大括號的語法不被認爲是好的風格 –