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

如何对多个关联的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:30:00