有没有更好的功能方法,可以Map使用Java 8 lambda语法将“ key:value”形式的字符串数组转换为a ?
Map
Arrays.asList("a:1.0", "b:2.0", "c:3.0") .stream() .map(elem -> elem.split(":") .collect(Collectors.toMap(keyMapper?, valueMapper?));
我现在拥有的解决方案似乎并没有真正起作用:
Map<String, Double> kvs = new HashMap<>(); Arrays.asList("a:1.0", "b:2.0", "c:3.0") .stream() .map(elem -> elem.split(":")) .forEach(elem -> kvs.put(elem[0], Double.parseDouble(elem[1])));
您可以修改解决方案以将Stream的String数组收集到中Map(而不是使用forEach):
Stream
String
forEach
Map<String, Double> 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<String, Double> 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"将导致NumberFormatException抛出parseDouble)。
"c:3r"
NumberFormatException
parseDouble