kotlin: 排序: sortWith/sortedWith

一,功能

sortedWith

  • 功能‌:通过 Comparator 或 compareBy 函数对集合进行排序,支持多条件排序。
  • 参数‌:接受一个 Comparator 对象或 compareBy 函数(用于创建比较器)。
  • 特点‌:返回排序后的新列表,不会修改原列表。 ‌

sortWith

  • 功能‌:通过 Comparator 或 compareBy 函数对集合进行排序,支持多条件排序。
  • 参数‌:接受一个 Comparator 对象或 compareBy 函数(用于创建比较器)。
  • 特点‌:直接修改原列表,不会返回新列表。

二,例子

代码:

        //处理按钮点击事件
        binding.button1.setOnClickListener {
            val text = listOf("one", "two", "three", "four")
            //我们也可以使用 with自定义compareBy,默认两个元素是相同类型的才行
            println("按长度升序:"+text.sortedWith(compareBy { it.length }))
            //降序
            println("按长度降序:"+text.sortedWith(compareByDescending { it.length }))
        }

运行结果:

image

三,例子

代码:

        //处理按钮点击事件
        binding.button2.setOnClickListener {
            val xx1 = listOf(1, 0, 23, 54, 5, 12, 54)
            val xx2 = listOf(3, 34, 43, 14, 98, 75, 92)
            val xx3 = listOf(1, 0, 2, 7, 4, 2, 3)
            //升序
            val sortAsc = Comparator { i1: Int, i2: Int -> i1 - i2 }
            println("升序排序后:")
            println(xx1.sortedWith(sortAsc))
            println(xx2.sortedWith(sortAsc))
            println(xx3.sortedWith(sortAsc))
            //降序
            println("降序排序后:")
            val sortDesc = Comparator { i1: Int, i2: Int -> i2 - i1}
            println(xx1.sortedWith(sortDesc))
            println(xx2.sortedWith(sortDesc))
            println(xx3.sortedWith(sortDesc))
        }

运行结果:

image

四,例子:

代码:

        //处理按钮点击事件:
        binding.button3.setOnClickListener {
            val origins = listOf("aaa", "c", "bb", "dd")
            //sortedWith() + Comparator自定义顺序进行比较
            val lengthComparator = Comparator { o1: String, o2: String -> o1.length - o2.length }
            println("长度升序:"+origins.sortedWith(lengthComparator)) //[c, bb, aaa]
            //继续简化
            println("长度升序:"+origins.sortedWith(compareBy { it.length })) //[c, bb, aaa]

        }

运行结果:
image

五,例子:

代码:

        //处理按钮点击事件
        binding.button4.setOnClickListener {
            val origins = listOf("aaa", "c", "bb", "dd")
            //按两个字段排序,默认都是升序
            val sortedWith = origins.sortedWith(
                compareBy<String> { it.length }.thenBy { it }
            )
            println("sortedWith排序后:"+sortedWith)  //

            val origins2 = mutableListOf("aaa", "c", "bb", "dd")
            println("未排序前:"+origins2)
            //按两个字段排序,默认都是升序
            origins2.sortWith(
                compareBy<String> { it.length }.thenBy { it }
            )
            println("排序后:"+origins2)  //
        }

运行结果:

image

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