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
相关产品推荐
相关产品推荐

