gpt4 book ai didi

kotlin - 从列表列表创建 map

转载 作者:行者123 更新时间:2023-12-05 09:29:48 25 4
gpt4 key购买 nike

我想从列表的列表创建 map ,我已经写了这段代码

fun getCourses(coursesCount: Int): Map<Course, Int> {
val paidCourses = mutableMapOf<Course, Int>()
for(student in data) {
for(course in student.subscribedCourses) {
if( course.isPaid ) {
paidCourses.putIfAbsent(course, 0)
paidCourses[course] = paidCourses[course]!! + 1
}
}
}
return paidCourses.toList().sortedByDescending { (_, value) -> value }.take(coursesCount).toMap()
}

我想知道如何在 Kotlin 中更加简洁。

最佳答案

你可以做一个flatMap来将“有类(class)的学生”扁平化为所有类(class)的一个列表,filter by isPaid , 按每门类(class)分组,并使用 eachCount计算类(class)数。

val paidCourses = 
data.flatMap { it.subscribedCourses }
.filter { it.isPaid }
.groupingBy { it }.eachCount()

请注意,这将创建多个中间列表并多次循环遍历它们,这可能是不可取的。这里有一种方法可以避免这种情况,并且仍然非常简洁:

val paidCourses = mutableMapOf<Course, Int>()
for(student in data) {
for(course in student.subscribedCourses) {
if (course.isPaid) {
paidCourses.merge(course, 1, Int::plus)
}
}
}

您还可以:

val paidCourses = mutableMapOf<Course, Int>()
for(student in data) {
student.subscribedCourses.filter { it.isPaid }
.groupingBy { it }
.eachCountTo(paidCourses)
}

关于kotlin - 从列表列表创建 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70335147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com