我有一张地图: Map<String, Map<String, String>> x
我想计算第二张地图中的值总和:
x.values().stream().mapToDouble(y -> Double.parse(y.get("myKey"))).sum();
Run Code Online (Sandbox Code Playgroud)
但是,如果y.get("myKey")不是有效数字,它将按预期抛出错误...有没有办法可以避免它并只传递有效数字
我看到来自guava库的Doubles.tryParse会返回null,因为它不可解析.但我无法弄清楚如何使用它来只加总有效数字.
无需使用第三方库,只需抓住NumberFormatException:
double sum = x.values().stream().mapToDouble(y -> {
try {
return Double.parseDouble(y.get("myKey"));
} catch (NumberFormatException e) {
return 0.0;
}
}).sum();
Run Code Online (Sandbox Code Playgroud)
您还可以捕获RuntimeException是否应忽略缺失值,而不是导致NullPointerException.
Doubles.tryParse()如果失败,则返回null。这是您可以利用它的优势:
x.values()
.stream()
.map(y -> Doubles.tryParse(y.get("myKey")))
.filter(Objects::nonNull) // exclude invalid numbers
.mapToDouble(Double::doubleValue)
.sum();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1014 次 |
| 最近记录: |