如何对多个关联的ArrayList进行多优先级比较与重排?
三个关联ArrayList多条件排序实现方案
你想要把三个列表对应元素绑定后再排序的思路是完全可行的,这是最稳妥的实现方式,能避免直接操作不同列表索引出现错位问题。
实现逻辑
- 先将三个列表相同索引位置的元素封装为统一的实体单元,把三组独立的对应关系绑定为一个整体
- 按照要求的优先级编写多条件比较规则
- 对封装后的集合完成排序后,再拆分回三个独立的ArrayList即可
Java代码示例
如果使用Java 16及以上版本,可以用record快速定义封装类,无需手动编写Getter、Setter:
// 定义封装类存储对应位置的a、b、c值 record Element(int a, int b, String c) {} public static void main(String[] args) { List<Integer> a = new ArrayList<>(Arrays.asList(1,4,2,6,4)); List<Integer> b = new ArrayList<>(Arrays.asList(4,3,3,6,7)); List<String> c = new ArrayList<>(Arrays.asList("bob", "tom", "ross", "alex", "jim")); // 将三组元素对应绑定 List<Element> elements = new ArrayList<>(); for (int i = 0; i < a.size(); i++) { elements.add(new Element(a.get(i), b.get(i), c.get(i))); } // 多条件排序:优先按a降序 → 再按b降序 → 最后按c的字母升序 elements.sort(Comparator.comparingInt(Element::a).reversed() .thenComparing(Comparator.comparingInt(Element::b).reversed()) .thenComparing(Element::c)); // 拆分回三个独立的ArrayList a.clear(); b.clear(); c.clear(); for (Element e : elements) { a.add(e.a()); b.add(e.b()); c.add(e.c()); } // 输出验证结果 System.out.println(a); // [6, 4, 4, 2, 1] System.out.println(b); // [6, 7, 3, 3, 4] System.out.println(c); // [alex, jim, tom, ross, bob] }
如果使用低于Java 16的版本,把record替换为普通实体类,手动编写构造方法和Getter方法即可。
内容的提问来源于stack exchange,提问作者Krystallox
相关产品推荐
相关产品推荐

