代码先锋网 代码片段及技术文章聚合

Kotlin中的List排序

技术标签: 经验知识分享  Kotlin

一、排序的简单用法

在Java中,对List进行排序可以使用Collections.sort()方法,在Kotlin中有非常简单的语法糖,所以这里记录一下,开发中尽量用简单的方式,方便维护。

一段未排序的示例代码如下:

data class User(val name: String, val isOnline: Boolean)

fun main() {
    val user1 = User("1", false)
    val user2 = User("2", false)
    val user3 = User("3", true)
    val user4 = User("4", true)
    val userList = mutableListOf(user4, user3, user2, user1)
    userList.forEach(::println)
}

输出结果如下:

User(name=4, isOnline=true)
User(name=3, isOnline=true)
User(name=2, isOnline=false)
User(name=1, isOnline=false)

我们希望按用户名进行排序,实现代码如下:

userList.sortBy { user -> user.name } 			// 指定以name属性进行升序排序
userList.sortByDescending { user -> user.name } // 指定以name属性进行降序排序

升序排序的打印结果如下:

User(name=1, isOnline=false)
User(name=2, isOnline=false)
User(name=3, isOnline=true)
User(name=4, isOnline=true)

Kotlin中的排序就是这么简单,如果我们把列表声明为不可变的列表,则不能使用sortBy或sortByDescending方法,因为列表不可以改变嘛。对于不可变列表的排序可以使用sortedBy或sortedBytDescending方法,方法名差不多,只是多了ed两个字母,它的实现是创建一个新的列表来保存排序后的结果,示例如下:

val userList = listOf(user4, user3, user2, user1)
val newList = userList.sortedBy { user -> user.name }
newList.forEach(::println)

二、排序的高级用法

查看sortBy和sortByDescending的源码发现,其是通过调用sortWith方法实现的,对应的sortedBy和sortedByDescending则是通过调用sortedWith方法实现的,sortWith的功能和sortedWith的功能原理是一样的,所以我这里讲清楚sortWith的使用即可。

  1. 使用sortWith实现升序排序

    val userList = mutableListOf(user4, user3, user2, user1)
    userList.sortWith(kotlin.Comparator {u1, u2 ->
        u1.name.compareTo(u2.name)
    })
    userList.forEach(::println)
    
  2. 使用sortWith实现降序排序

    降序非常简单,把u1和u2的比较顺序交换一下即可

    userList.sortWith(kotlin.Comparator {u1, u2 ->
            u2.name.compareTo(u1.name)
        })
    
  3. 使用sortWith实现多重排序

    sortBy只能指定一个属性参与排序,并且此属性对象必须已经实现了Comparable接口,通过调用该接口的compare方法进行排序,而使用sortWith则可以指定多个属性参与排序,属性不需要实现Comparable接口,可以自己定制排序的逻辑。

    假设我们希望按用户的在线状态排序,在线的排前面,离线的排后面,状态相同的情况下再按名称排序,实现代码如下:

    fun main() {
        val user1 = User("1", false)
        val user2 = User("2", false)
        val user3 = User("3", true)
        val user4 = User("4", true)
        val userList = mutableListOf(user2, user1, user4, user3)
        
        println("排序前:")
        userList.forEach(::println)
        
        userList.sortWith(kotlin.Comparator { u1, u2 ->
            if (u1.isOnline != u2.isOnline) {
                u2.isOnline.compareTo(u1.isOnline) // 状态以降序排序
            } else {
                u1.name.compareTo(u2.name)         // 名字以升序排序
            }
        })
        
        println("排序后:")
        userList.forEach(::println)
    }
    

    输出结果如下:

    排序前:
    User(name=2, isOnline=false)
    User(name=1, isOnline=false)
    User(name=4, isOnline=true)
    User(name=3, isOnline=true)
    
    排序后:
    User(name=3, isOnline=true)
    User(name=4, isOnline=true)
    User(name=1, isOnline=false)
    User(name=2, isOnline=false)
    

    再一次感受到了Kotlin的强大,真是太方便了,使用Kotlin进行开发可以节省我们大量的宝贵时间。

版权声明:本文为android_cai_niao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/android_cai_niao/article/details/108407853

智能推荐

JAVA中List的排序

对于List的排序,第一印象很可能就是用Collections.sort(list); 这个排序是升序排列,一般情况下,是好用的,但是如果碰到这样一种情况: List<String> list = new ArrayList<String>(); list.add("192.168.12.1"); list.add("192.168.2.1&q...

List 中的元素排序

要求:策划对于列表中显示的内容需要进行排序,比如先按人物等级从高到底,如果等级相同,则按贡献度从高到底,如果贡献度相同,则按id进行排序 实现: 调用:...

Python中的list排序

尽量使用sorted进行排序,保持代码的统一性 一、基本形式 sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]]) 参数解释: (1)iterable指定要排序的list或者iterable,不用多说; (2)cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数,如: s...

【list排序】根据list中的对象中属性排序

jdk.18 1.根据list中对象的某一个属性排序 2.根据list中对象的某两个属性排序  ...

Kotlin 中list set map

给定一个字符串 ,转成想要的List 关键字:filterTo 和 -= List 元素怎么才算相等 MutableList 是可以进行写操作的 List ,关键词 shuffle() 大打乱次序 set Set的默认实现 - LinkedHashSet—— 保留元素插入的顺序 Map 的默认实现 – LinkedHashMap—— 迭代...

猜你喜欢

Java中List的排序和List的MAp

  这里是一个类中类去实现条件优先排序的问题   LIst中的MAp   ...

Kotlin对list的操作

涉及到的代码在KotlinForJava的Kotlin1项目中,针对集合List和MutableList的操作进行测试,参考的是Kotlin中文学习资料,前面给出的文章中能找到相应的资源链接。 学习的同时通过编码练习是很有必要的,除了加深理解还可以发现资料中存在的问题,常见的如IDEA或API更新了而资料是旧的,花时间去学习已经废弃的方法就不值得了。所以,建议英文好的通过官网给出的资料来学习是最好...

kotlin集合list的使用

普通list的创建以及元素的获取 可变和不可变集合的创建,以及相互转换 kotlin语言的mutator函数 kotlin语言的list集合的遍历 kotlin语言的解构语法过滤元素学习...

对List中的日期进行排序

运行结果如: [color=red]----before sort:[/color] 2010-09-22 2010-09-27 2010-09-19 2010-09-17 2010-09-18 [color=red]----after sort:[/color] 2010-09-17 2010-09-18 2010-09-19 2010-09-22 2010-09-27...

List中的数据按时间排序

使用sql语句很简单,order by就完了。java中需要实现一个Comparator比较器接口,然后调用Collections.sort方法。 下面一个实例转载自对List中每个对象元素按时间顺序排序...