首页 > 解决方案 > 首先按字母顺序对对象数组进行排序,然后按数字排序

问题描述

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

标签: androidarrayssortingkotlin

解决方案


您可以先按第一个字符是否为数字的指示排序,然后按全名排序:

val allDrinks = DrinkData.generateAllDrinks().sortedWith(
    compareBy<Drink> { it.theDrinkName.first().isDigit() }
        .thenBy { it.theDrinkName.lowercase() }
)

推荐阅读