2016-03-05 65 views
3

我得到了一個我想要轉換爲地圖的字符串列表。我想下面的,但我似乎無法找出爲什麼它不工作將列表轉換爲地圖

List<String> dataList = new ArrayList<>(//code to create the list); 

Map<String, Double> doubleMap = dataList.stream().collect(Collectors.toMap(o->o, Double::new)); 

我得到的是:

java.lang.NumberFormatException: For input string: "Test1" 

這似乎是試圖把一個字符串轉換成值(是一個Double)而不是創建一個空/空雙。

我基本上希望地圖包含字符串,每個記錄0.0。

回答

6

您正在試圖通過一個Stringpublic Double(String s)構造函數,如果你的List包含無法解析爲double任何String其失敗。

當你傳遞一個Double構造函數toMap的方法的參考,這是等同於:

Map<String, Double> doubleMap = dataList.stream().collect(Collectors.toMap(o->o, o->new Double(o))); 

你應該寫:

Map<String, Double> doubleMap = dataList.stream().collect(Collectors.toMap(o->o, o->0.0)); 
+0

這是有趣的,所以我總是要傳遞對象(在這種情況下是o),並指出將要前進的是什麼? – Aeseir

+3

@Aeseir不,您可以使用方法引用,但此引用引用的方法將獲取Stream的元素作爲參數(如果它是對靜態方法或構造函數的引用,這就是代碼中發生的事情片段)或者在Stream的每個元素上執行(如果它是一個實例方法)。 – Eran

+0

坦克的輸入,解決了很多其他問題沿途 – Aeseir