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

如何在ArrayList按名称排序后筛选含1、2、3顺序的名称?

实现方法

核心思路

  1. 先将排序后的列表按name分组,收集每个name对应的所有数字序列(如果每个Class1本身就带数字列表,可跳过分组步骤)。
  2. 编写工具方法检查数字序列中是否存在1→2→3的顺序子序列(不需要连续,只要先后顺序满足即可)。
  3. 遍历分组结果,对符合条件的name输出指定格式的提示。

代码实现

1. 假设Class1的定义

class Class1 {
    private String name;
    private int num;

    // 构造器
    public Class1(String name, int num) {
        this.name = name;
        this.num = num;
    }

    // Getter方法
    public String getName() { return name; }
    public int getNum() { return num; }
}

2. 检查1→2→3子序列的工具方法

private static boolean has123Sequence(List<Integer> nums) {
    int matchStage = 0;
    for (int num : nums) {
        if (matchStage == 0 && num == 1) {
            matchStage = 1; // 找到第一个目标1
        } else if (matchStage == 1 && num == 2) {
            matchStage = 2; // 在1之后找到2
        } else if (matchStage == 2 && num == 3) {
            return true; // 在2之后找到3,满足顺序
        }
    }
    return false;
}

3. 主逻辑处理

public static void main(String[] args) {
    // 示例:已按name排序的ArrayList<Class1>
    ArrayList<Class1> sortedList = new ArrayList<>();
    sortedList.add(new Class1("name1", 1));
    sortedList.add(new Class1("name1", 3));
    sortedList.add(new Class1("name1", 2));
    sortedList.add(new Class1("name1", 3));
    sortedList.add(new Class1("name2", 2));
    sortedList.add(new Class1("name2", 1));
    sortedList.add(new Class1("name3", 1));
    sortedList.add(new Class1("name3", 2));
    sortedList.add(new Class1("name3", 3));

    // 按name分组,保留原排序的name顺序
    Map<String, List<Integer>> nameToNums = new LinkedHashMap<>();
    for (Class1 item : sortedList) {
        nameToNums.computeIfAbsent(item.getName(), k -> new ArrayList<>()).add(item.getNum());
    }

    // 遍历检查并输出结果
    for (Map.Entry<String, List<Integer>> entry : nameToNums.entrySet()) {
        String name = entry.getKey();
        if (has123Sequence(entry.getValue())) {
            System.out.printf("%s存在1、2、3顺序,存在问题%n", name);
        }
    }
}

说明

  • 因为原列表已按name排序,使用LinkedHashMap分组可以保留name的出现顺序,和原列表一致。
  • 工具方法采用线性遍历,一旦找到符合顺序的子序列就立即返回,效率较高。
  • 如果你的Class1中数字属性本身就是一个列表(而非单个数字),直接遍历sortedList,对每个元素的数字列表调用has123Sequence方法即可,无需分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:54:37