簡體   English   中英

排序 arraylist 並返回 arraylist(不是列表) - Kotlin

[英]Sorting arraylist and returning an arraylist (not a list) - Kotlin

我正在嘗試使用RecyclerView顯示排序信息。 為此,我有一個自定義數據類型的ArrayList 我想使用ArrayList中的字段之一按降序對ArrayList中的數據進行排序。 我熟悉已經可用的方法( sortWithsortBysortByDescending等),但不幸的是,它們都從ArrayList更改為List ,這會使回收站視圖停止工作。 理想情況下,我想保留ArrayList ,因為我需要它用於我稍后在項目中執行的其他流程。

我想要達到的目標:

輸入: arrayListName = ArrayList<CustomType>

過程:[按arrayListName.firstName的降序排序]

OUTPUT: return ArrayList<CustomType>

我嘗試將List (如下所示)轉換為ArrayList ,但這會引發以下錯誤:

java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList 

拋出錯誤的代碼行(我嘗試了各種方法,但它們都在該行拋出異常):

val sortedModel = model.sortedWith(compareBy { it.name}) as ArrayList<Model>

任何幫助表示贊賞(:

我對 java 解決方案也很滿意,因為我理解它並且可以輕松地從 java 到 kotlin 實施。

您不能將List直接轉換為ArrayList 如果要將List轉換為ArrayList ,可以這樣做:

val sortedModel = model.sortedByDescending { it.name }.toCollection(ArrayList())

這將幫助你

val list = arrayList.sortedByDescending { it.firstName.length }
        result.addAll(list)

完整代碼:

val arrayList: ArrayList<CustomType> = arrayListOf()
val result: ArrayList<CustomType> = arrayListOf()
arrayList.add(CustomType("Aadddd"))
arrayList.add(CustomType("Ccd"))
arrayList.add(CustomType("Bbdd"))
arrayList.add(CustomType("Ffddd"))
arrayList.add(CustomType("Dd"))

val list = arrayList.sortedByDescending { it.firstName.length }
result.addAll(list)

Output:

SORT [{"firstName":"Aadddd"},{"firstName":"Ffddd"},{"firstName":"Bbdd"},{"firstName":"Ccd"},{"firstName":"Dd"}]

使用sortWith代替它就地,試試這個

data class A(
    val x : Int
)

fun main(args: Array<String>) {
    var a = arrayListOf( A(1) ,A(2) ,A(3) ,A(4) )
    a.sortWith(compareByDescending { it.x })
    assert( a is ArrayList )
    println(a)
}

自己試試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM