use*_*638 5 collections android mutable kotlin
我正在尝试使用 kotlin 创建一个 MutableList 但我收到一条错误消息:
类型推断失败。预期类型不匹配:推断类型为 MutableList 但预期为 MutableCollection
...而且我不确定如何将 MutableList 转换为 MutableCollection。
我试过使用:
.toMutableList().toCollection()
Run Code Online (Sandbox Code Playgroud)
但它正在寻找目的地——我不知道该怎么做。
代码片段:
data class HrmSearchResult(
var rssi: Short?,
var adjustRssi: Short?,
var timeout: Int,
var serialNumber: Long?,
var isIn: Boolean,
var countIn: Int
)
private val hashMapHrm = ConcurrentHashMap<Long?, HrmSearchResult>()
val hrmDeviceList: MutableCollection<Long>
get() = try {
if (hashMapHrm.elements().toList().none { it.isIn}) {
//if there are no member in range, then return empty list
arrayListOf()
} else {
hashMapHrm.elements()
.toList()
.filter { it.isIn }
.sortedByDescending { it.adjustRssi }
.map { it.serialNumber }
.toMutableList().toCollection()
}
} catch (ex: Exception) {
AppLog.e(
LOG, "Problem when get devices " +
"return empty list: ${ex.localizedMessage}"
)
arrayListOf()
}
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏。
问题是为空性,而不是集合类型,即你正在创建一个List<Long?>,其中一个List<Long>被期待。
您可以inferred type is MutableList<Long?> but MutableCollection<Long> was expected通过以下方式最低限度地重现错误消息 ( ):
val foo: MutableCollection<Long> =
listOf(1L, 2, 3, 4, null)
.toMutableList()
Run Code Online (Sandbox Code Playgroud)
您可以通过插入.filterNotNull()删除潜在的空值来修复它,并将 a 转换List<T?>为 a List<T>:
val foo: MutableCollection<Long> =
listOf(1L, 2, 3, 4, null)
.filterNotNull()
.toMutableList()
Run Code Online (Sandbox Code Playgroud)
(所以你的.toCollection()电话实际上是不需要的,可以挂断)
特定于您的代码的其他一些注意事项:
您可能想使用.valuesover .elements.toList(),并且map { }.filterNotNull()可以组合成mapNotNull,所以总而言之,您可能希望将链写为
hashMapHrm.values
.filter { it.isIn }
.sortedByDescending { it.adjustRssi }
.mapNotNull { it.serialNumber }
.toMutableList()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6649 次 |
| 最近记录: |