android - 首先按字母顺序对对象数组进行排序,然后按数字排序
问题描述
Drinks
我有一个包含一个theDrinkName
字段的对象 ( ) 数组。我希望能够先按字母顺序对Drink
对象theDrinkName
字段进行排序,然后再按数字排序。
这是我用来生成所有饮料的函数。
data class Drink(val theDrinkName:String)
object DrinkData {
fun generateAllDrinks():Array<Drink> {
return arrayOf(
Drink("Vodka"),
Drink("rum"),
Drink("Gin"),
Drink("151"),
Drink("99")
)
}
}
我使用以下字母按字母顺序(基于theDrinkName
)对其进行排序:
val allDrinks = DrinkData.generateAllDrinks().sortedBy { it.theDrinkName.toLowerCase().first()}.toTypedArray()
for (drink in allDrinks){
println(drink.theDrinkName)
}
这将打印以下内容:
151
99
Gin
rum
Vodka
默认情况下,它首先对数字进行排序,然后按字母排序。如何先按字母排序这些数据,然后按数字排序,如下所示:
期望的结果:
Gin
rum
Vodka
151
99
解决方案
您可以先按第一个字符是否为数字的指示排序,然后按全名排序:
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
compareBy<Drink> { it.theDrinkName.first().isDigit() }
.thenBy { it.theDrinkName.lowercase() }
)
推荐阅读
- c++ - 计算具有限制的唯一排列的有效方法
- c# - C# 正则表达式在 HTML 中查找短语排除特定标签
- java - 空的问题,添加一些随机打印修复错误
- typescript - (Typescript)在数组中的函数之间强制执行类型
- javascript - 生日方法,向控制台输出无效日期
- javascript - 如何获取某些键值的数组?
- javascript - 如何将服务连接到 Cloud Foundry 应用程序?
- python - AWS Lambda - 根据文件名导入 csv 文件
- java - 使用 JDBC 连接到 PostgreSQL DB 的问题
- python - 将列表数据转换为 CoNLL 2003 NER 格式并将其保存在文本文件中