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

如何通过Project的ID对Task对象列表进行分组?

按Project的id分组Task对象的解决方案

你遇到的问题核心有两个:

  1. 直接用task::getProject分组是按Project对象的引用相等性(默认equals比较内存地址)来分组,而非id,所以id相同但对象不同的Task会被分到不同组。
  2. Java不支持task::getProject::getId这种链式方法引用,得换写法。

下面给两种可行的解决方式:

方式一:用Lambda表达式直接获取id

这是最简洁的写法,直接通过lambda链式调用拿到Project的id作为分组键:

tasks.stream().collect(Collectors.groupingBy(task -> task.getProject().getId()));

方式二:封装方法后用方法引用

如果想复用这个分组逻辑,或者偏好方法引用的写法,可以在Task类里新增一个获取Project id的方法:

public class Task {
    private Project project;

    // 新增方法,直接返回关联Project的id
    public int getProjectId() {
        return project.getId();
    }

    // 原有的getProject方法(如果需要保留)
    public Project getProject() {
        return project;
    }
}

之后就可以用方法引用实现分组:

tasks.stream().collect(Collectors.groupingBy(Task::getProjectId));

另外补充:如果你的Project类重写了equals和hashCode方法,让它们基于id判断对象相等性,那原来的task::getProject分组也能生效,但这种方式只适合业务上认为id相同就是同一个Project对象的场景,否则还是推荐直接按id分组的方式。

内容的提问来源于stack exchange,提问作者Samet DAĞ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:40:24