如何在 Java 中对二维数组按多列进行排序(先按第一列、再按第二列)
发布时间 - 2026-01-31 00:00:00 点击率:次本文介绍使用 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])
⚠️ 注意事项:
- 确保每行长度 ≥ 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自动化浏览器测试入门


