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

如何从ArrayList中去除Result对象重复项并保留最高grade项

如何从ArrayList中保留每个name对应grade最高的对象

原代码的问题

  1. newList.contains(element.name)逻辑完全错误:newList存储的是Result对象,而非字符串类型的name,contains方法默认用对象引用相等判断,导致所有元素都会被加入列表,根本没实现去重逻辑。
  2. Result构造函数存在笔误:this.name=first;应改为this.name=name;,否则name属性无法被正确赋值。
  3. grade属性定义不合理:你需要比较grade的高低,但原代码中grade是String类型,无法直接做数值比较,必须改为int或其他数值类型。

方案一:利用已排序数据集的特性

从你的输入数据来看,数据集已经按name分组,同name下grade从高到低排序,这种情况下可以直接遍历,仅保留每个name分组的第一个元素(即grade最高的元素):

// 先修正Result类的定义
class Result {
    int date;
    String name;
    int grade;

    Result(int date, String name, int grade) {
        this.date = date;
        this.name = name; // 修正笔误
        this.grade = grade;
    }
}

// 处理逻辑
List<Result> info = ...; // 你的已排序数据集
List<Result> newList = new ArrayList<>();

if (info.isEmpty()) {
    return;
}

// 初始化第一个元素
Result prev = info.get(0);
newList.add(prev);

for (int i = 1; i < info.size(); i++) {
    Result current = info.get(i);
    // 当前元素name与前一个不同,说明是新分组,加入结果列表
    if (!current.name.equals(prev.name)) {
        newList.add(current);
        prev = current;
    }
    // 同name的元素因已按grade降序排列,直接跳过
}

// 输出结果
for (Result st : newList) {
    System.out.println(st.date + " " + st.name + " " + st.grade);
}

方案二:用HashMap实现通用去重(不依赖排序)

如果数据集没有按grade排序,或者需要更通用的实现,可以用HashMap存储每个name对应的最高grade对象:

List<Result> info = ...;
// 用LinkedHashMap可保留原数据中首次出现最高grade元素的顺序
Map<String, Result> nameToTopResult = new LinkedHashMap<>();

for (Result element : info) {
    Result existing = nameToTopResult.get(element.name);
    if (existing == null) {
        // 该name无记录,直接存入
        nameToTopResult.put(element.name, element);
    } else {
        // 比较grade,保留更高的那个
        if (element.grade > existing.grade) {
            nameToTopResult.put(element.name, element);
        }
    }
}

// 转换为结果列表
List<Result> newList = new ArrayList<>(nameToTopResult.values());

// 输出结果
for (Result st : newList) {
    System.out.println(st.date + " " + st.name + " " + st.grade);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:35:26