将列表转换为映射

Aes*_*eir 3 java lambda java-8

我有一个字符串列表,我想转换为地图.我尝试了以下,但我似乎无法弄清楚为什么它不起作用

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

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

我得到的是:

java.lang.NumberFormatException: For input string: "Test1"
Run Code Online (Sandbox Code Playgroud)

它似乎试图将一个字符串放入值(这是一个Double)而不是创建一个空/ null double.

我基本上希望地图包含String,每个记录0.0.

Era*_*ran 6

您正在尝试将a传递Stringpublic Double(String s)构造函数,如果您List包含任何String无法解析为的构造函数,则会失败double.

当您将Double构造函数的方法引用传递给toMap它时,它等效于:

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

相反,写:

Map<String, Double> doubleMap = dataList.stream().collect(Collectors.toMap(o->o, o->0.0));
Run Code Online (Sandbox Code Playgroud)

  • @Aeseir不,您可以使用方法引用,但此引用引用的方法将获取Stream的元素作为参数(如果它是对静态方法或构造函数的引用,这是您的代码片段中发生的事情) )或者在Stream的每个元素上执行(如果它是实例方法). (3认同)