Kotlin技巧:Collection管理集合的常用函数

使用groupBy函数

在Kotlin中,管理集合是日常编程的基本方面,往往需要根据特定特性高效地组织和检索数据。groupBy函数将一个集合分割成一个map,其中每个键代表一个独特的标准,对应的值是一个列表,列表中的元素匹配这个标准。这种分组机制提供了一种整洁和直观的方式来组织数据,使得对分组数据进行后续操作更加简单。

考虑一种场景,有一列表的书,你希望按它们的类型来分组。

data class Book(val title: String, val author: String, val genre: String)

可以按以下方式按类型对书进行分组:

fun main() {
    val books = listOf(
        Book("The Fellowship of the Ring", "J.R.R. Tolkien", "Fantasy"),
        Book("The Two Towers", "J.R.R. Tolkien", "Fantasy"),
        Book("The Catcher in the Rye", "J.D. Salinger", "Fiction"),
        Book("To Kill a Mockingbird", "Harper Lee", "Fiction")
    )

    val booksByGenre = books.groupBy { it.genre }
    booksByGenre.forEach { (genre, books) ->
        println("$genre: ${books.map { it.title }}")
    }
}

这段代码片段将图书按流派组织为一个map,其中键是类型,值是属于这些类型的图书列表。然后,它按类型打印出分组的书籍的标题,让人一眼就可以看到组织结构。

通过根据指定的标准对集合元素进行分组,开发者可以编写更具表达力、更高效、更清洁的代码。无论是为了组织数据还是为了进一步处理,groupBy都是一种多功能的函数,体现了Kotlin在简化复杂任务方面的优雅。

使用sortBy和sortedBy进行集合排序

当使用Kotlin处理集合时,将元素组织成特定顺序是一项常见任务。无论是按字母顺序排序姓名列表,还是根据特定属性排列对象,Kotlin都提供了函数来完成这些任务:sortBy和sortedBy。这些函数提供了一种明确、简洁的方式来排序集合,提高了代码的可读性和效率。

sortBy和sortedBy都是Kotlin为排序集合提供的扩展函数。尽管它们的功能相似,但根据上下文和你正在处理的集合的类型,他们的应用略有不同。

sortBy用于可变集合。它在原地排序集合,修改原始集合。

另一方面,sortedBy用于可变集合和不可变集合。它返回一个新的已排序元素的列表,不改变原始集合。

  • • 排序字符串列表,

假设你想按字母顺序排序的姓名列表:

fun main() {
    val names = listOf("Jane", "Bob", "Alice", "Mike")
    val sortedNames = names.sortedBy { it }
    println(sortedNames)
}

在这个例子中,sortedBy采用一个选择器函数{it},它简单地返回每个元素,列表是根据字符串的自然顺序排序的。

  • • 根据属性排序对象,

考虑一个用户对象列表,其中每个用户都有一个名字和年龄。如果想按他们的年龄排序用户,可以轻松地使用sortedBy实现:

 data class User(val name: String, val age: Int)

fun main() {
    val users = listOf(User("Jane", 30), User("Bob", 25), User("Alice", 29))
    val sortedUsers = users.sortedBy { it.age }
    println(sortedUsers)
}

这里的sortedBy函数使用了一个选择器函数{it.age},它从每个用户对象中提取年龄属性以确定顺序。

  • • 使用sortBy进行原地排序,

如果你正在使用一个可变列表并且想要直接对其进行排序,可以使用sortBy:

 data class User(val name: String, val age: Int)

fun main() {
    val users = mutableListOf(User("Jane", 30), User("Bob", 25), User("Alice", 29))
    users.sortBy { it.age }
    println(users)
}

这次,原始用户列表就地排序,不会创建新列表。

记住,清晰和有效的排序不仅有助于数据组织,而且还增强了代码的整体可读性和维护性。使用sortBy和sortedBy,Kotlin提供了一种直观的方法来实现这一点,使你的集合保持有序和代码库清洁。

使用distinct和distinctBy去除集合中的重复项

Kotlin的distinct函数是一个简单直接的工具,用于从集合中删除重复的元素。它返回一个列表,这个列表只包含原始集合中的唯一元素。distinct的优点在于其简单性以及其能够处理任何类型的集合。无论你正在处理整数、字符串或自定义对象的列表,distinct都可以筛选出集合中的每一个唯一元素。

下面是一个简单的例子来演示其使用:

fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 1, 2)
    val uniqueNumbers = numbers.distinct()
    println(uniqueNumbers)
}

在此例子中,distinct函数检查数字列表并移除重复项,结果得到一个包含唯一数字的列表。

虽然distinct非常有用,但在某些场景下,你可能希望根据特定的属性或标准去除重复项。这就是distinctBy函数发挥作用的地方。distinctBy函数允许你定义一个选择器函数,以确定每个元素的唯一性。

有一个User对象的集合,每个User都有一个名字和年龄。如果你想删除名字重复的用户,无论他们的年龄如何,使用distinctBy可以轻松完成这项任务:

data class User(val name: String, val age: Int)

fun main() {
    val users = listOf(
        User("Alice", 30),
        User("Bob", 25),
        User("Alice", 22)
    )
    
    val uniqueByName = users.distinctBy { it.name }
    println(uniqueByName)
}

在上述代码中,distinctBy函数用于根据其名称属性筛选用户,当确定唯一性时有效地忽略了年龄属性。

使用distinct和distinctBy不仅可以简化你的代码,而且可以提高其可读性和可维护性。然而,在处理大型集合或复杂对象时,需要考虑性能因素。distinct和distinctBy都需要遍历整个集合,对于大型数据集来说,这可能计算量很大。

转自:Kotlin技巧:Collection管理集合的常用函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值