java - 根据属性将某些属性从 1 个列表复制到另一个列表(不同的属性合并)

标签 java arraylist merge java-stream array-merge

首先:我想不出这篇文章的合适标题。

其次:我有 2 个列表,我正在尝试基于一个键合并/更新一些列表属性。

List<MyClass> result = new ArrayList<MyClass>();
List<MyClass> intermediaryData = new ArrayList<MyClass>();

两个列表都有与 MyClass 相同的 T,其中包含:

public String externalId; -- This is the unique id
public String companyName;
public String fiscalNumber;
public Integer noEmployees;
public Integer yearMonth;

列表“结果”包含:

externalId = "123"
companyName = "Demo"

列表“intermediaryData”包含:

externalId = "123"
fiscalNumber= "84564213"
noEmployees = 12
yearMonth = 201812

现在,我想不出一种方法来合并这两个基于“externalId”属性的列表,这样我将得到一个包含所有属性集的最终列表。

情商:

externalId = "123"
companyName = "Demo"
fiscalNumber= "84564213"
noEmployees = 12
lastCloseYearMonth = 201812

我可以用 2 个 for 来完成,但是有没有使用流的“更快”方法。

for (ClientPayrollDataSummaryDTO r : result)
    for (ClientPayrollDataSummaryDTO rs : returnedSummaryList)
        if (r.externalId.contains(rs.externalId)) {
            r.fiscalNumber = rs.fiscalNumber;
            r.lastCloseYearMonth = rs.lastCloseYearMonth;
            ....
        }

最佳答案

您可以使用以下假定适当的构造函数:

List<MyClass> finalList = new ArrayList<>();
result.forEach(m1 -> intermediaryData.stream()
        .filter(m2 -> m2.getExternalId().equals(m1.getExternalId()))
        .map(m2 -> new MyClass(m1.getExternalId(), m1.getCompanyName(), m2.getFiscalNumber(), m2.getNoEmployees(), m2.getYearMonth()))
        .forEach(finalList::add));

<罢工> 或者,可以尝试使用 mergeFunction作为

<罢工>
List<MyClass> finalMappedValues = new ArrayList<>(Stream.concat(result.stream(), intermediaryData.stream())
    .collect(Collectors.toMap(MyClass::getExternalId, Function.identity(), 
            (a, b) -> new MyClass(a.getExternalId(), a.getCompanyName(), b.getFiscalNumber(), b.getNoEmployees(), b.getYearMonth())))
    .values());

<罢工>

关于java - 根据属性将某些属性从 1 个列表复制到另一个列表(不同的属性合并),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53609300/

相关文章:

java - 取消引用数组中的对象以进行 Java 垃圾回收

java - 当我使用 RequestDispatcher 包含 html 文件时,如何修复字符集编码?

mysqldump 合并而不是覆盖

mercurial - merge 两个不相关的 Mercurial 存储库后如何调整历史记录?

git - 仅 merge git 分支中的增量更改

java - 合并排序算法有问题

java - ArrayList越界异常?

java - 如何将 HashMap 序列化为 ArrayList 为 JSON?

java - 处理对象数组

java - 如何延迟一个 while 循环?