mes*_*eso 12 java dictionary list java-8 java-stream
我对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) { .. }
Run Code Online (Sandbox Code Playgroud)
Pan*_*hal 11
Map<String, Double> finalResult = inputMap.entrySet()
.stream()
.collect(Collectors.toMap(
Entry::getKey,
e -> e.getValue()
.stream()
.mapToDouble(str -> computeScore(str))
.sum()));
Run Code Online (Sandbox Code Playgroud)
上面的代码在地图上迭代并创建一个具有相同键的新地图,在放置值之前,它首先遍历每个值 - 这是一个列表,通过调用computeScore()
每个列表元素计算得分,然后将收集的分数相加价值.
您还可以将此forEach
方法与流API一起使用,以产生您正在寻找的结果.
Map<String, Double> resultSet = new HashMap<>();
inputMap.forEach((k, v) -> resultSet.put(k, v.stream()
.mapToDouble(s -> computeScore(s)).sum()));
Run Code Online (Sandbox Code Playgroud)
s -> computeScore(s)
可以改变为使用即方法参考T::computeScore
,其中T
是包含类的名称computeScore
.