kotlin统计 Map<String?, List<DriverBook>>
时间: 2024-05-28 18:06:34 浏览: 188
Kotlin 中可以使用 groupBy 函数来统计 Map<String?, List<DriverBook>>,groupBy 函数可以根据某个属性值对列表进行分组,返回值为 Map<Key, List<T>>,其中 Key 为属性值,List<T> 为该属性值对应的对象列表。
示例代码如下:
```
val driverBooks: List<DriverBook> = ...
val map = driverBooks.groupBy { it.driverName }
```
以上代码将根据 DriverBook 对象的 driverName 属性值对 driverBooks 进行分组,返回的 map 的 key 为 driverName 属性值,value 为该属性值对应的 DriverBook 对象列表。
相关问题
kotlin将 Map<String?, List<PhonBook>> 转为 Map<String, MutableList<PhonBook>>
在Kotlin中,可以使用`mapValues`函数和`toMutableMap`函数来将`Map<String?, List<PhonBook>>`转换为`Map<String, MutableList<PhonBook>>`。
首先,我们需要遍历原始的`Map`,并使用`mapValues`函数将每个值转换为可变列表类型。然后,我们可以使用`toMutableMap`函数将转换后的键值对集合重新组装成一个新的可变的`Map`。
下面是示例代码:
```kotlin
val originalMap: Map<String?, List<PhonBook>> = mapOf(
"key1" to listOf(PhonBook("name1"), PhonBook("name2")),
"key2" to listOf(PhonBook("name3"), PhonBook("name4"))
)
val convertedMap: Map<String, MutableList<PhonBook>> = originalMap.mapValues { (_, value) ->
value.toMutableList()
}.toMutableMap()
// 打印转换后的Map
convertedMap.forEach { (key, value) ->
println("$key: $value")
}
```
请注意,上述示例中的`PhonBook`是一个自定义的类,你需要根据实际情况替换为你自己的类。
Line 3: Char 26: error: none of the following functions can be called with the arguments supplied: public infix fun <T, R> Array<out String>.zip(other: Array<out ???>): List<Pair<String, ???>> defined in kotlin.collections public infix fun <T, R> Array<out String>.zip(other: Iterable<???>): List<Pair<String, ???>> defined in kotlin.collections val pairs = names.zip(heights) // 合并为 Pair 类型的数组 ^ Line 4: Char 34: error: unresolved reference: it pairs.sortByDescending { it.second } // 按照身高降序排序 ^ Line 5: Char 28: error: unresolved reference: it return pairs.map { it.first }.toTypedArray() // 提取排序后的 names
这个错误是因为在第三行中,你尝试将一个字符串数组(names)与一个未知类型的数组(heights)合并成一个Pair类型的数组。你需要将heights的类型指定为与names相同的字符串数组类型。
修改第三行为:
```
val pairs = names.zip(heights as Array<out String>) // 将 heights 转换为 String 数组类型
```
第四行和第五行中的错误是因为你引用了一个未定义的变量it。你需要将it替换为lambda表达式参数中的参数名。
修改第四行为:
```
pairs.sortByDescending { pair -> pair.second } // 使用参数名 pair 替换 it
```
修改第五行为:
```
return pairs.map { pair -> pair.first }.toTypedArray() // 使用参数名 pair 替换 it
```
完整的代码如下:
```kotlin
fun sortByHeight(names: Array<String>, heights: Array<Int>): Array<String> {
val pairs = names.zip(heights as Array<out String>)
pairs.sortByDescending { pair -> pair.second }
return pairs.map { pair -> pair.first }.toTypedArray()
}
```
阅读全文