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

如何在Handler类中按行号对Table内的Rows集合进行排序

按行号对Rows数组排序的实现方案

针对你现有类结构,要按行号(Rows类的number字段)对选中的Rows集合排序,有两种简洁的实现方式,以下是具体方案:

方法一:使用Lambda表达式结合Collections.sort(无需修改Rows类)

直接在Handler类的sortRowsByNum方法中,先让用户选择要排序的Table,然后利用Comparator的Lambda表达式指定按行号排序逻辑:

import java.util.Collections;

public void sortRowsByNum() {
    if (listT.isEmpty()) {
        System.out.println("没有可用的Table,请先创建Table!");
        return;
    }

    System.out.println("选择要排序的Table编号:");
    printT();
    if (console.hasNextInt()) {
        int tableIndex = console.nextInt() - 1; // 转换为ArrayList的索引
        if (tableIndex >= 0 && tableIndex < listT.size()) {
            Table targetTable = listT.get(tableIndex);
            // 按行号升序排序,若要降序则交换o1和o2的位置
            Collections.sort(targetTable.rowsArrayList, (o1, o2) -> Integer.compare(o1.getNumber(), o2.getNumber()));
            System.out.println("排序完成!当前Table的行内容:");
            for (Rows row : targetTable.rowsArrayList) {
                row.printRows();
            }
        } else {
            System.out.println("输入的Table编号不存在!");
        }
    } else {
        System.out.println("请输入有效的整数编号!");
    }
}

方法二:让Rows实现Comparable接口(全局默认排序规则)

如果希望Rows对象默认就按行号排序,可以修改Rows类实现Comparable<Rows>接口,重写compareTo方法:

修改后的Rows类

public class Rows implements Comparable<Rows> {
    private int number; 
    private String data; 
    private int numT;

    // 原有构造方法、getter/setter、printRows、toString方法保持不变

    @Override
    public int compareTo(Rows other) {
        // 按行号升序排序,降序则返回other.number - this.number
        return Integer.compare(this.number, other.number);
    }
}

对应的sortRowsByNum方法实现

此时排序逻辑更简洁,直接调用Collections.sort即可:

import java.util.Collections;

public void sortRowsByNum() {
    if (listT.isEmpty()) {
        System.out.println("没有可用的Table,请先创建Table!");
        return;
    }

    System.out.println("选择要排序的Table编号:");
    printT();
    if (console.hasNextInt()) {
        int tableIndex = console.nextInt() - 1;
        if (tableIndex >= 0 && tableIndex < listT.size()) {
            Table targetTable = listT.get(tableIndex);
            Collections.sort(targetTable.rowsArrayList); // 直接调用排序
            System.out.println("排序完成!当前Table的行内容:");
            for (Rows row : targetTable.rowsArrayList) {
                row.printRows();
            }
        } else {
            System.out.println("输入的Table编号不存在!");
        }
    } else {
        System.out.println("请输入有效的整数编号!");
    }
}

两种方式的区别

  • 方法一更灵活:可以在不同场景下定义不同的排序规则(比如偶尔需要按行内容排序),无需修改Rows类的结构。
  • 方法二更简洁:如果所有场景下Rows都只需要按行号排序,实现Comparable后可以直接复用排序逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:55:30