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

Kotlin中如何实现对象数组先按字母排序再按数字排序

解决方法

你需要自定义排序规则,首先区分「字母开头」和「数字开头」的元素,把字母开头的优先级设为更高,再在同分类下按名称排序,替换原来的sortedBy为sortedWith实现多规则排序即可。

调整后的排序代码如下:

val allDrinks = DrinkData.generateAllDrinks().sortedWith(compareBy<Drink> {
    // 第一层规则:字母开头排在前,数字开头排在后
    !it.theDrinkName.first().isLetter()
}.thenBy {
    // 第二层规则:同分类下按名称不区分大小写排序
    it.theDrinkName.lowercase()
}).toTypedArray()

逻辑说明

  1. 第一层排序规则中,!it.theDrinkName.first().isLetter()的返回值:字母开头的元素返回false(对应排序权重0),数字开头的元素返回true(对应排序权重1),权重越小排序越靠前,自然实现字母在前、数字在后的效果。
  2. 第二层排序规则统一把名称转小写后排序,字母组会按a-z顺序不区分大小写排列,数字组会按字符串自然顺序排序,完全匹配你需要的输出结果。

运行后输出和你预期的一致:

Gin
rum
Vodka
151
99

注:原代码中使用的toLowerCase方法已在新版Kotlin中废弃,推荐使用lowercase()方法替代。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:24:00