如何在 Java 中对二维数组按多列进行排序(先按第一列、再按第二列)

发布时间 - 2026-01-31 00:00:00    点击率:

本文介绍使用 java 的 `arrays.sort()` 配合 `comparator` 链式调用,对 int 类型二维数组按主次字段(如先第 0 列、再第 1 列)实现稳定升序排序的方法。

在 Java 中,对二维数组(如 int[][] arr)进行多级排序,核心在于将每一行视为一个逻辑“记录”,并借助 Comparator 定义复合比较规则。推荐方式是使用 Comparator.comparingInt(...).thenComparing(...) 实现链式比较——它先按第一列(索引 0)升序排序;当第一列值相等时,再按第二列(索引 1)升序排序,完全满足“主键优先、次键兜底”的业务需求。

以下为完整可运行示例:

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])

⚠️ 注意事项

  • 确保每行长度 ≥ 2,否则运行时抛出 ArrayIndexOutOfBoundsException;建议排序前校验数据完整性;
  • 此方法直接原地修改原数组,不创建新数组;如需保留原始顺序,请先 Arrays.copyOf();
  • 不适用于 null 行;如有空行,需在 lambda 中添加 Objects.requireNonNull(row) 或自定义空值处理逻辑。

综上,Comparator 链式调用是 Java 8+ 中简洁、安全、高性能的多字段排序方案,兼顾可读性与扩展性,是处理二维数组排序的首选实践。


# java  # ai  # Integer  # NULL  # sort  # int  # Lambda  # 泛型  # function  # 升序  # 链式  # 多字  # 如有  # 请先  # 自定义  # 如需  # 高性能  # 抛出  # 再按 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  油猴 教程,油猴搜脚本为什么会网页无法显示?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  中山网站推广排名,中山信息港登录入口?  Linux安全能力提升路径_长期防护思维说明【指导】  JavaScript数据类型有哪些_如何准确判断一个变量的类型  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何快速打造个性化非模板自助建站?  JavaScript模板引擎Template.js使用详解  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  java获取注册ip实例  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  PHP 500报错的快速解决方法  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  打造顶配客厅影院,这份100寸电视推荐名单请查收  重庆市网站制作公司,重庆招聘网站哪个好?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Android仿QQ列表左滑删除操作  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  如何在香港免费服务器上快速搭建网站?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何在景安云服务器上绑定域名并配置虚拟主机?  *服务器网站为何频现安全漏洞?  Java类加载基本过程详细介绍  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  详解MySQL数据库的安装与密码配置  网站制作软件免费下载安装,有哪些免费下载的软件网站?  QQ浏览器网页版登录入口 个人中心在线进入  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  Laravel怎么连接多个数据库_Laravel多数据库连接配置  如何快速生成可下载的建站源码工具?  Android自定义控件实现温度旋转按钮效果  googleplay官方入口在哪里_Google Play官方商店快速入口指南  如何用PHP快速搭建高效网站?分步指南  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  Android滚轮选择时间控件使用详解  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  什么是javascript作用域_全局和局部作用域有什么区别?  js实现获取鼠标当前的位置  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门