我对 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()));
上面的代码遍历 map 并创建一个具有相同键的新 map &在放置值之前,它首先遍历每个值 - 这是一个列表,通过调用 computeScore()
计算分数每个列表元素,然后将收集到的分数相加以放入值中。
关于Java 8 流 Map<String, List<String>> 每个键值的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51428490/