kotlin: 排序: 多字段指定升序降序排序

一,例子:

代码:

      //处理按钮点击事件
        binding.button5.setOnClickListener {
            //second升序,first升序
            val sortedValues = listOf(1 to "a", 2 to "b", 7 to "c", 6 to "d", 5 to "c", 6 to "e")
            //两个升序
            val sortedList = sortedValues.sortedWith(compareBy({it.first}, {it.second}))
            println("升序+升序:"+sortedList)

            //第一个降,第二个升
            val sortedList2 = sortedValues.sortedWith(compareByDescending<Pair<Int, String>> { it.first}.thenBy<Pair<Int, String>>{it.second})
            println("降序+升序:"+sortedList2)

            //第一个升,第二个降
            val sortedList3 = sortedValues.sortedWith(compareBy<Pair<Int, String>> { it.first}.thenByDescending<Pair<Int, String>>{it.second})
            println("升序+降序:"+sortedList3)

            //两个降序
            val sortedList4 = sortedValues.sortedWith(compareByDescending<Pair<Int, String>> { it.first}.thenByDescending<Pair<Int, String>>{it.second})
            println("降序+降序:"+sortedList4)
        }

运行结果:

image

二,例子

代码:

        //处理按钮点击事件
        binding.button6.setOnClickListener {
            //定义list
            val sortedValues = listOf(1 to "a", 2 to "b", 7 to "c", 6 to "d", 5 to "c", 6 to "e")
            //两个降序
            val twoDesc = Comparator { u1: Pair<Int, String>, u2: Pair<Int, String> ->
                if (u1.first != u2.first) {
                    u2.first.compareTo(u1.first) // first以降序排序
                } else {
                    u2.second.compareTo(u1.second)         // second以降序排序
                }
            }
            println("降序+降序:"+sortedValues.sortedWith(twoDesc))

            //升序+降序
            val ascDesc = Comparator { u1: Pair<Int, String>, u2: Pair<Int, String> ->
                if (u1.first != u2.first) {
                    u1.first.compareTo(u2.first) // first以升序排序
                } else {
                    u2.second.compareTo(u1.second)         // second以降序排序
                }
            }
            println("升序+降序:"+sortedValues.sortedWith(ascDesc))

            //升序+升序
            val twoAsc = Comparator { u1: Pair<Int, String>, u2: Pair<Int, String> ->
                if (u1.first != u2.first) {
                    u1.first.compareTo(u2.first) // first以升序排序
                } else {
                    u1.second.compareTo(u2.second)         // second以升序排序
                }
            }
            println("升序+升序:"+sortedValues.sortedWith(twoAsc))

            //降序+升序
            val descAsc = Comparator { u1: Pair<Int, String>, u2: Pair<Int, String> ->
                if (u1.first != u2.first) {
                    u2.first.compareTo(u1.first) // first以升序排序
                } else {
                    u1.second.compareTo(u2.second)         // second以降序排序
                }
            }
            println("降序+升序:"+sortedValues.sortedWith(descAsc))
        }

运行结果:

image

三,例子:

代码:

        binding.button7.setOnClickListener {
            data class User(val name: String, val age: Int)
            val user1 = User("z", 23)
            val user2 = User("bb", 9)
            val user3 = User("d", 14)
            val user4 = User("bb", 14)
            val userList = mutableListOf(user4, user3, user2, user1)

            //age升,name升
            val list1 = userList.sortedWith(
                compareBy(User::age).thenBy(User::name)
            )
            println("age升,name升:"+list1)

            //age升,name降
            val list2 = userList.sortedWith(
                compareBy<User>{it.age}.thenByDescending<User>{it.name}
            )
            println("age升,name降:"+list2)

            //age降,name降
            val list3 = userList.sortedWith(
                compareByDescending<User>{it.age}.thenByDescending<User>{it.name}
            )
            println("age降,name降:"+list3)

            //age降,name升
            val list4 = userList.sortedWith(
                compareByDescending<User>{it.age}.thenBy<User>{it.name}
            )
            println("age降,name升:"+list4)
        }

运行结果:

image

posted @ 2025-08-23 09:29  刘宏缔的架构森林  阅读(6)  评论(0)    收藏  举报