java - 如何通过某种类型的变量使用 stream() 求和

标签 java java-stream

我正在尝试对同一个团队的所有分数求和并返回一个字符串列表(团队:totalPoints)

public class Player {
    String name;
    int team;
    int points;
}

List <Player> player= new ArrayList<>();
player.add(new Player("Michael",1,10)); 
player.add(new Player("Mike",2,15));
player.add(new Player("Tom",1,7));  
player.add(new Player("Marty",2,9));

我想收到 List<String >,其中:"1 : 17" , "2 : 24"

最佳答案

您可以将 Collectors.groupingBy 与下游 Collectors.summingInt 一起使用:

List<String> result = player.stream()
        .collect(Collectors.groupingBy(Player::getTeam,
                Collectors.summingInt(Player::getPoints)))
        .entrySet().stream()
        .map(e -> e.getKey() + " : " + e.getValue())
        .collect(Collectors.toList());

关于java - 如何通过某种类型的变量使用 stream() 求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245392/

相关文章:

java - 由@ControllerAdvice中的@ExceptionHandler返回的ResponseEntity不能在swagger-ui.html中显示

java - 无法运行已编译的 Java 代码 - 无法找到或加载主类

Java流: group and sort by a previous mapping result?

Java 8 在多维对象数组中找到值的第一个实例

java - 如何使用 Java 8 Stream API 将嵌套列表合并为简单列表

java streams - 如何使用键上的条件来平整集合映射中的所有值

java - 如何知道从另一个android应用程序可读的可能参数

java - 如何将 JTextfield 的 setText 设置为带有数组的方法

java - 为什么 'T.super.toString()' 和 'super::toString' 使用合成访问器方法?

Java 8 结果链接