You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java:如何合并列表中ID相同的SampleObject对象?

合并同ID的SampleObject对象列表

你定义了如下自定义类型:

public class SampleObject {
    private UUID id;
    private List<ValueObject> values;
    
    // getters, all-args constructor, etc.
}

其中ValueObject仅包含若干字符串。你有一个SampleObject类型的列表payload,列表中存在多个id相同但values列表内容不同的对象,需要合并所有同id的对象,将它们的ValueObject列表整合到一个对象中,最终得到新的SampleObject列表。

你已经尝试使用Collectors.groupingBy分组:

List<SampleObject> payload = // initializing the List

payload.stream().collect(Collectors.groupingBy(SampleObject::getId));

但返回的是Map<UUID, List<SampleObject>>,不知道如何合并Map值中的对象。

解决方案

方法一:使用Collectors.toMap直接合并

通过toMap的合并函数,在收集过程中直接完成同id对象的values合并,无需额外处理Map:

List<SampleObject> mergedList = payload.stream()
    .collect(Collectors.toMap(
        SampleObject::getId,
        obj -> obj,
        (existing, newObj) -> {
            // 合并两个对象的values列表
            List<ValueObject> combined = new ArrayList<>(existing.getValues());
            combined.addAll(newObj.getValues());
            // 用全参构造器创建新的合并对象
            return new SampleObject(existing.getId(), combined);
        }
    ))
    .values()
    .stream()
    .collect(Collectors.toList());

方法二:先分组再合并Map条目

如果坚持使用groupingBy分组,可遍历Map的entry,对每个分组内的对象进行values合并:

Map<UUID, List<SampleObject>> groupedMap = payload.stream()
    .collect(Collectors.groupingBy(SampleObject::getId));

List<SampleObject> mergedList = groupedMap.entrySet().stream()
    .map(entry -> {
        UUID id = entry.getKey();
        // 扁平化所有分组内的values并收集为一个列表
        List<ValueObject> combinedValues = entry.getValue().stream()
            .flatMap(obj -> obj.getValues().stream())
            .collect(Collectors.toList());
        return new SampleObject(id, combinedValues);
    })
    .collect(Collectors.toList());

注意事项

  • 若需要对ValueObject去重,可在flatMap后添加.distinct(),但需确保ValueObject重写了equals()和hashCode()方法。
  • 示例中通过创建新SampleObject完成合并,避免修改原对象产生副作用;若类设计允许修改,也可直接向现有对象的values列表中添加元素,但不推荐在流操作中修改外部状态。

内容的提问来源于stack exchange,提问作者noob123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:05:16