我正在尝试将玩家列表转换为地图。播放器包含名称并作为变量运行。
List<Player> runnerList = Arrays.asList(new Player("Virat", 4654), new Player("Jaddu", 5798),
new Player("Dhoni", 4581), new Player("Virat", 8709), new Player("Dhoni", 4711),
new Player("Virat", 4541));
我的问题是我正在尝试通过使用流合并运行来转换为地图,而无法通过。
分别尝试并合并值,如下所示,并获得预期结果。
playerList.forEach(n -> {
mapVal.merge((n.getName()), (n.getDistance()), (val1, val2) -> IntStream.of(val1, val2).sum());
});
寻找使用流的解决方案的结果将是{Dhoni = 9292,Jaddu = 5798,Virat = 17904}。
答案 0 :(得分:9)
您可以将toMap
收集器用作:
Map<String, Integer> mapVal = playerList.stream()
.collect(Collectors.toMap(Player::getName,
Player::getDistance, Integer::sum));
或groupingBy
为:
Map<String, Integer> mapVal = playerList.stream()
.collect(Collectors.groupingBy(Player::getName,
Collectors.summingInt(Player::getDistance)));