
本文介绍使用 java 的 `arrays.sort()` 配合 `comparator` 链式调用,对 int 类型二维数组按主次字段(如先第 0 列、再第 1 列)实现稳定升序排序的方法。
在 Java 中,对二维数组(如 int[][] arr)进行多级排序,核心在于将每一行视为一个逻辑“记录”,并借助 Comparator 定义复合比较规则。推荐方式是使用 Comparator.
以下为完整可运行示例:
import java.util.Arrays;
import java.util.Comparator;
public class MultiColumnSort {
public static void main(String[] args) {
int[][] arr = {
{1, 7},
{2, 6},
{3, 9},
{4, 1},
{5, 3},
{6, 7}
};
// 按第 0 列升序为主序,第 1 列升序为次序
Arrays.sort(arr, Comparator.comparingInt(row -> row[0])
.thenComparing(row -> row[1]));
System.out.println(Arrays.deepToString(arr));
// 输出:[[1, 7], [2, 6], [3, 9], [4, 1], [5, 3], [6, 7]]
}
} ✅ 关键说明:
- Comparator.
comparingInt(...) 显式指定了泛型类型,避免类型推断失败; - thenComparing(...) 支持任意 ToIntFunction 或 Function,此处用 row -> row[1] 即可(自动装箱为 Integer,但 thenComparingInt 更高效,推荐如下写法):
.thenComparingInt(row -> row[1])
- 若需降序,可组合 reversed(),例如:
comparingInt(row -> row[0]).reversed().thenComparingInt(row -> row[1])
⚠️ 注意事项:
立即学习“Java免费学习笔记(深入)”;
- 确保每行长度 ≥ 2,否则运行时抛出 ArrayIndexOutOfBoundsException;建议排序前校验数据完整性;
- 此方法直接原地修改原数组,不创建新数组;如需保留原始顺序,请先 Arrays.copyOf();
- 不适用于 null 行;如有空行,需在 lambda 中添加 Objects.requireNonNull(row) 或自定义空值处理逻辑。
综上,Comparator 链式调用是 Java 8+ 中简洁、安全、高性能的多字段排序方案,兼顾可读性与扩展性,是处理二维数组排序的首选实践。










