Java8集合将两个具有不同对象的不同列表和一个公共字段合并在一起

Java8集合将两个具有不同对象的不同列表和一个公共字段合并在一起,java,collections,merge,Java,Collections,Merge,我有两个类,其中有一个公共字段。 基于公共现场部门,需要获得所有记录和总金额的列表 根据部门id合并记录并计算每个部门id的金额的最佳方法是什么 // "ABC",(sum(1234.00f+1000.00f)) // "pqr",(sum(1200.00f+500.00f))) // Expecting result as line 33, 34 package com.coll.java8.foreach; 导入java.util.Array

我有两个类,其中有一个公共字段。 基于公共现场部门,需要获得所有记录和总金额的列表

根据部门id合并记录并计算每个部门id的金额的最佳方法是什么

// "ABC",(sum(1234.00f+1000.00f))
// "pqr",(sum(1200.00f+500.00f)))
    // Expecting result as line 33, 34
package com.coll.java8.foreach;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.stream.collector;
导入java.util.stream.stream;
导入静态java.util.stream.Collectors.collectingAndThen;
导入静态java.util.stream.Collectors.groupingBy;
导入静态java.util.stream.Collectors.maxBy;
导入java.math.MathContext;
公共班级经理{
公共静态void main(字符串参数[]){
List manList=new ArrayList();
添加(新的MList(“测试1”,123,“ABC”);
添加(新的MList(“测试2”,134,“pqr”);
添加(新的MList(“Test3”,456,“xyz”);
List posslist=newarraylist();
添加(新Plist(“ABC”,“555”,1234.00f));
新增(新Plist(“pqr”,“444”,1200.00f));
增加(新Plist(“ABC”,“555”,1000.00f));
添加(新的Plist(“xyz”,“555”,25.00f));
增加(新Plist(“pqr”,“444”,500.00f));
//“ABC”(总和(1234.00f+1000.00f))
//“pqr”(总和(1200.00f+500.00f))
//预期结果为第33、34行
}
我有两个类,其中有一个公共字段

不,您没有。您有两个类,每个类都有一个恰好同名的字段。Java不将其视为“公共字段”,因为没有继承或共享接口

您需要做的是这样的事情:

public abstract class BaseRecord {
  protected String department;

  public String getDepartment() { return department; }
}

public class PList extends BaseRecord {
...
}
您的一些请求有点难以遵循,但是如果您想对PList的金额求和,您可以使用
列表执行类似的操作

double total = myList.stream()
  .map(item -> item.getAmount())
  .sum();
我有两个类,其中有一个公共字段

不,您没有。您有两个类,每个类都有一个恰好同名的字段。Java不将其视为“公共字段”,因为没有继承或共享接口

您需要做的是这样的事情:

public abstract class BaseRecord {
  protected String department;

  public String getDepartment() { return department; }
}

public class PList extends BaseRecord {
...
}
您的一些请求有点难以遵循,但是如果您想对PList的金额求和,您可以使用
列表执行类似的操作

double total = myList.stream()
  .map(item -> item.getAmount())
  .sum();

提示:PList和MList应该从包含部门的类中派生。然后读取和筛选列表会变得更容易。您需要获取什么的总量?
MList
没有数量,所以当您“合并”列表时,您试图做什么?使用公共字段,它需要将数据显示为“ABC”(总和)(1234.00f+1000.00f))/“pqr”(sum(1200.00f+500.00f)))您希望显示
MList
的哪些信息?部门和金额是
PList
的字段,因此根本不需要
MList
,除非您希望有类似“Test1部门金额之和”的内容。提示:PList和MList应该从包含部门的类派生。然后读取和筛选列表会变得更容易。您需要获取什么的总金额?
MList
没有金额,那么当您“合并”列表时,您试图做什么?使用公共字段,它需要将数据显示为“ABC”,(总和)(1234.00f+1000.00f))/“pqr”(sum(1200.00f+500.00f)))您希望显示
MList
的哪些信息?部门和金额是
PList
的字段,因此根本不需要
MList
,除非您希望有类似“Test1部门金额之和”的内容。
double total = myList.stream()
  .map(item -> item.getAmount())
  .sum();