示例Map<String, List<String>>的inputMap:
{"product":["132377","2123232","312335678","423432","5215566"],"order":["3174252","1468453","1264543","35723112","235775645"]}
1、使用forEach实现
Map<String, Double> resultSet = new HashMap<>();
inputMap.forEach((k, v) -> resultSet.put(k, v.stream()
.mapToDouble(s -> computeScore(s)).sum()));
2、使用collect()实现
Map<String, Double> finalResult = inputMap.entrySet()
.stream()
.collect(Collectors.toMap(
Entry::getKey,
e -> e.getValue()
.stream()
.mapToDouble(str -> computeScore(str))
.sum()));
或
Map<String, Double> finalResult = inputMap.entrySet() .stream() .map(entry -> new AbstractMap.SimpleEntry<String, Double>( // maps each key to a new // Entry<String, Double> entry.getKey(), // the same key entry.getValue().stream() .mapToDouble(string -> computeScore(string)).sum())) // List<String> mapped to // List<Double> and summed .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); // collected by the same // key and a newly // calulcated value
3、Collect的使用
以stream的元素转变成一种不同的结果,可以是一个List,Set或Map。
例如:
List<Person> filtered = persons .stream() .filter(p -> p.name.startsWith("P")) .collect(Collectors.toList()); System.out.println(filtered);
输出:
[Peter, Pamela]
Stream文档:https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html