2016-03-05 72 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