gpt4 book ai didi

java - 在 List 上调用 .sort 时出现 AbstractList UnsupportedOperationException

转载 作者:行者123 更新时间:2023-12-01 07:44:36 27 4
gpt4 key购买 nike

我正在使用 Collections.sort() 对列表进行排序,这似乎在我可以测试的各种方式上都有效。但我的一些用户却崩溃了。

Caused by java.lang.UnsupportedOperationException
java.util.AbstractList.set (AbstractList.java:681)
java.util.AbstractList$FullListIterator.set (AbstractList.java:143)
java.util.Collections.sort (Collections.java:1909)
com.myapp.MyFragment.myMethod (MyFragment.java:225)

但是,我所做的只是尝试对列表进行排序

private void myMethod(List<MyThing> myThings) {

Collections.sort(myList, (thing1, thing2) -> Long.compare(thing2.getLongValue(), thing1.getLongValue()));

我注意到 Android 8 及更高版本上不会发生这种情况。它只发生在 5.0 - 7.1

该列表被实例化为 ArrayList、填充并设置为类实例的成员(作为通用列表)。然后该对象通过 EventBus 发布。然后使用 Kotlin 的 mapsortedByDescending 函数对列表进行映射和排序。然后将映射和排序的列表传递给 myMethod()

此 Kotlin 扩展正在生成传递给此方法的列表:

fun List<MyThing>.mapAndSort(context: Context): List<MyThing> {
return mapNotNull {
when (it.type) {
type -> it.getTyped(context) //all of these return polymorphic MyThings
anotherType -> it.getAnotherTyped(context)
someOtherType -> it.getSomeOtherTyped(context)
yetAnotherType -> it.getYetAnotherType(context)
yetOneMoreType -> it.getYetOneMoreType(context)
finallyLastTyope -> it.getFinallyLastType(context)
else -> null
}
}.sortedByDescending { it.longValue }
}

到目前为止,我看到这个列表是 java.util.Arrays$ArrayListkotlin.collections.EmptyList

我认为这与 EventBus 有关,但可能是 Kotlin 传递了 Kotlin 集合列表类型。有谁知道到底发生了什么吗?

最佳答案

Collections.sort 是就地列表变异操作。如果您要在 Java 方法中调用它,只需传递一个在 Kotlin 中静态已知为 MutableList 的列表。

如果您有一个未知可变性的 List,您可以通过调用 .toMutableList() 扩展函数从中获取 MutableList .

如果您不喜欢用 Java 编写 myMethod,您可以将其替换为 Kotlin 中的 list.sortedByDescending { it.longValue } 调用,然后您不需要先将该列表转换为可变列表。事实上,这就是 mapAndSort 方法最终所做的事情,所以看起来不需要再次排序。

关于java - 在 List 上调用 .sort 时出现 AbstractList UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55802573/

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