bsa*_*sam 32 java lambda functional-programming java-8 java-stream
是否有更好的功能方式将"key:value"形式的字符串数组转换为Map
使用Java 8 lambda语法?
Arrays.asList("a:1.0", "b:2.0", "c:3.0")
.stream()
.map(elem -> elem.split(":")
.collect(Collectors.toMap(keyMapper?, valueMapper?));
Run Code Online (Sandbox Code Playgroud)
我现在的解决方案似乎没有真正的功能:
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])));
Run Code Online (Sandbox Code Playgroud)
Era*_*ran 54
您可以修改您的解决方案收集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]));
Run Code Online (Sandbox Code Playgroud)
当然,此解决方案无法防止无效输入.也许您应该添加一个过滤器,以防分裂String没有分隔符:
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]));
Run Code Online (Sandbox Code Playgroud)
这仍然无法保护您免受所有无效输入的影响(例如,"c:3r"
会导致NumberFormatException
被抛出parseDouble
).
归档时间: |
|
查看次数: |
39392 次 |
最近记录: |