java - 减少对象列表中的整数属性

标签 java functional-programming java-8 reduction collectors

我有这个结构的模型

public class MyModel {
        private long firstCount;
        private long secondCount;
        private long thirdCount;
        private long fourthCount;

        public MyModel(firstCount,secondCount,thirdCount,fourthCount) 
        {
        }
        //Getters and setters

}  

假设我有一个包含以下数据的模型列表

MyModel myModel1 = new MyModel(10,20,30,40);
MyModel myModel2 = new MyModel(50,60,70,80);

List<MyModel> modelList = Arrays.asList(myModel1, myModel2);

假设我想找出所有模型中 firstCount 的总和,我可以这样做

Long collect = modelList.stream().collect
(Collectors.summingLong(MyModel::getFirstCount));

如果我想一次性找出所有模型中的属性总和怎么办?有什么方法可以实现吗?

输出应该是这样的

  • firstCount 的总和 = 60
  • secondCount 的总和 = 80
  • thirdCount 的总和 = 100
  • fourthCount 的总和 = 120

最佳答案

使用 MyModel 作为累加器:

MyModel reduced = modelList.stream().reduce(new MyModel(0, 0, 0, 0), (a, b) ->
                      new MyModel(a.getFirstCount() + b.getFirstCount(),
                                  a.getSecondCount() + b.getSecondCount(),
                                  a.getThirdCount() + b.getThirdCount(),
                                  a.getFourthCount() + b.getFourthCount()));
System.out.println(reduced.getFirstCount());
System.out.println(reduced.getSecondCount());
System.out.println(reduced.getThirdCount());
System.out.println(reduced.getFourthCount());

关于java - 减少对象列表中的整数属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37774520/

相关文章:

java - 在 CSS 中设置 JavaFX Anchor Pane 的 anchor

java - 如何通过JNI操作CameraPreview bytearray? (开放式简历)

java - Generics Java,无限通配符

c# - 循环的 Lambda 表达式转换以显示列表

javascript - 从对象数组构建 Json

Java Map computeIfAbsent 问题

java - 为什么 lambda 中的变量必须是最终的或实际上是最终的?

java - 如何在 Eclipse 中正确更新类

c# - 放大值类型的 DataContract 代理项

Java 8流和列表分组