【问题标题】:Converting a list of objects to Map将对象列表转换为 Map
【发布时间】:2020-03-16 03:36:17
【问题描述】:

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

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},正在寻找使用流的解决方案。

【问题讨论】:

  • 什么mapVal?
  • mapVal 是 hashMap 类型
  • 很好奇为什么你需要IntStream.of(val1, val2).sum() 而不是val1 + val2

标签: java hashmap java-stream


【解决方案1】:

您可以将toMap Collector 用作:

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

【讨论】:

    猜你喜欢
    • 2021-11-17
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2011-12-23
    • 2013-12-02
    相关资源
    最近更新 更多