java - 将列表转换为 map

标签 java lambda java-8

我得到了一个要转换为 map 的字符串列表。我尝试了以下但我似乎无法弄清楚为什么它不起作用

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)而不是创建一个空的/空的 double。

我基本上希望 map 包含字符串,每条记录都为 0.0。

最佳答案

您正在尝试将 String 传递给 public Double(String s) 构造函数,如果您的 List 包含任何 >String 无法解析为 double

当您将 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));

关于java - 将列表转换为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35812887/

相关文章:

java-8 - Java 8 中是否仍然存在方法区域?

java - sun.reflect 的来源在哪里?

java - 可以在android中迭代GridLayout内容的列或行吗?

java - 安全终止 Spring JMS 应用程序

java - Spring Session cookie永不过期

c++ - lambda 函数的静态数组 (C++)

c# - 将属性传递给 C#、EF 中的函数

c++ - 无法使用带有 const 引用的 lambda 对 std::vector 进行排序

java - 使用 Java 8 Stream API 合并两个 Map<String, Integer>

java - 如何用 Java 8 编写 instanceof?