使用Java 8 Lambda表达式将String数组转换为Map
有没有更好的功能方法,可以Map
使用Java 8 lambda语法将“ key:value”形式的字符串数组转换为a ?
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
):
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
)。
以上是 使用Java 8 Lambda表达式将String数组转换为Map 的全部内容, 来源链接: utcz.com/qa/436175.html