java - Java 8 流映射> 每个键的值总和
问题描述
我对 Java 8(仍在学习)不太熟悉,并希望看看是否可以使用流找到与以下代码等效的东西。
下面的代码主要是尝试获取String中每个值对应的double值,然后求和。我在这种格式的任何地方都找不到太多帮助。我不确定使用流是否会清理代码或使其更混乱。
// safe assumptions - String/List (Key/Value) cannot be null or empty
// inputMap --> Map<String, List<String>>
Map<String, Double> finalResult = new HashMap<>();
for (Map.Entry<String, List<String>> entry : inputMap.entrySet()) {
Double score = 0.0;
for (String current: entry.getValue()) {
score += computeScore(current);
}
finalResult.put(entry.getKey(), score);
}
private Double computeScore(String a) { .. }
解决方案
Map<String, Double> finalResult = inputMap.entrySet()
.stream()
.collect(Collectors.toMap(
Entry::getKey,
e -> e.getValue()
.stream()
.mapToDouble(str -> computeScore(str))
.sum()));
上面的代码迭代地图并创建一个具有相同键的新地图&在放置值之前,它首先迭代每个值 - 这是一个列表,通过调用computeScore()
每个列表元素计算分数,然后将收集到的分数相加以放入价值。
推荐阅读
- android - 来自 Android 10 的 WebService 调用
- sql - 以给定月份的日期为中心
- java - 在docker上运行的Springboot微服务无法连接到mysql
- android - 有没有办法将 android espresso 测试初始化为测试列表
- javascript - 如何强制用户从节点服务器上的服务器端注销并响应 Web 应用程序?
- html - 如何在我的代码中设置语义 UI 微调器?
- sql - Oracle - 跨行分配一个行值
- django - 在模板中使用 {{ request.get_host }}
- fifo - 德鲁伊跑不起来
- typescript - Typescript:如何在部分 OR 中使用两个接口