使用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])));

回答:

您可以修改解决方案以将StreamString数组收集到中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

回到顶部