将对象列表转换为Map

时间:2019-11-20 12:07:16

标签: java hashmap java-stream

我正在尝试将玩家列表转换为地图。播放器包含名称并作为变量运行。

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}。

1 个答案:

答案 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)));