Я сортирую Список с помощью 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.Затем список отображается и сортируется с использованием функций map
и sortedByDescending
от Kotlin.Затем сопоставленный и отсортированный список передается на 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$ArrayList
и kotlin.collections.EmptyList
.
Я думаю, что это как-то связано с EventBus, но, возможно, Kotlin передает тип списка коллекций Kotlin.Кто-нибудь точно знает, что происходит?