您可以修改您的解决方案,以将Stream数组收集到Map(而不是forEach)中:
Map kvs =
Arrays.asList("a:1.0", "b:2.0", "c:3.0")
.stream()
.map(elem -> elem.split(":"))
.collect(Collectors.toMap(e -> e[0], e -> Double.parseDouble(e[1]));
当然这个解决方案没有防止无效输入的保护.也许你应该添加一个过滤器,以防拆分字符串没有分隔符:
Map kvs =
Arrays.asList("a:1.0", "b:2.0", "c:3.0")
.stream()
.map(elem -> elem.split(":"))
.filter(elem -> elem.length==2)
.collect(Collectors.toMap(e -> e[0], e -> Double.parseDouble(e[1]));
这仍然不能保护您免受所有无效输入(例如“c:3r”将导致由ParseDouble引发NumberFormatException).