You need to enable JavaScript to run this app. Java中如何比较ArrayList存储对象的box属性实现集合分组拆分
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何比较ArrayList存储对象的box属性实现集合分组拆分

问题修复方案

原有代码的核心错误

  • 比较逻辑完全失效:直接将从列表取出的完整ObjektsDEGR对象与1、2、3做equals对比,由于ObjektsDEGR未重写equals方法,默认对比对象内存地址,永远不会匹配成功。
  • 存在索引越界风险:catchAllBoxes是从原数组截取的子集,自身元素索引从0开始连续排列,后续筛选循环仍沿用原数组的全局索引范围取值,会直接触发越界异常。

修复核心逻辑

你已经在ObjektsDEGR类中实现了getBox()方法,无需对整个对象做对比,只需调用该方法提取对象的box属性值,直接和1、2、3做int类型的数值匹配即可。

修正后的完整实现代码

private void writeToArrayList(int category){
    ArrayList<ObjektsDEGR> catchAllBoxes = new ArrayList<>();
    int rangeStart = (category - 1) * nV;
    int rangeEnd = rangeStart + nV;

    // 按category规则筛选待处理对象集合
    for (int j = rangeStart; j < rangeEnd; j++) {
        catchAllBoxes.add(basicDEGR[j]);
    }

    ArrayList<ObjektsDEGR> box1Filtered = new ArrayList<>();
    ArrayList<ObjektsDEGR> box2Filtered = new ArrayList<>();
    ArrayList<ObjektsDEGR> box3Filtered = new ArrayList<>();

    // 遍历catchAllBoxes自身的元素完成分类
    for (int j = 0; j < catchAllBoxes.size(); j++) {
        ObjektsDEGR currentObj = catchAllBoxes.get(j);
        // 仅提取box属性值做对比
        int boxVal = currentObj.getBox();
        if (boxVal == 1) {
            box1Filtered.add(currentObj);
        } else if (boxVal == 2) {
            box2Filtered.add(currentObj);
        } else if (boxVal == 3) {
            box3Filtered.add(currentObj);
        } else {
            // 保留原有分支逻辑:非1/2/3值的对象归入box3集合
            box3Filtered.add(currentObj);
        }
    }
}

附带代码笔误提醒:ObjektsDEGR类中setVocF1至setVocF5的setter方法存在赋值错误:所有方法内都将入参赋值给了this.voc,而非对应的vocF1~vocF5属性,后续调用会导致属性值错乱,需要逐一修正。

内容的提问来源于stack exchange,提问作者cheese steak jimmy's

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 17:15:03