【问题标题】:Sorting arraylist and returning an arraylist (not a list) - Kotlin对数组列表进行排序并返回一个数组列表(不是列表) - Kotlin
【发布时间】:2021-12-03 04:34:56
【问题描述】:

我正在尝试使用RecyclerView 显示排序信息。为此,我有一个自定义数据类型的ArrayList。我想使用ArrayList 中的字段之一按降序对ArrayList 中的数据进行排序。我熟悉已经可用的方法(sortWithsortBysortByDescending 等),但不幸的是,它们都从ArrayList 更改为List,这使回收站视图无法正常工作。理想情况下,我想保留 ArrayList,因为我需要它用于稍后在项目中执行的其他流程。

我想要达到的目标:

输入:arrayListName = ArrayList<CustomType>

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

输出: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。

【问题讨论】:

  • 老实说,如果我们有您使用的产生该错误的代码,那将很容易为您提供帮助。
  • 确保导入类型匹配,java.util.Arrays$ArrayList,与java.util.ArrayList
  • @LouisWasserman 我已经在最后添加了代码行(:
  • @GayanWeerakutti 我实际上并没有进口任何东西。我应该进口吗?

标签: java android kotlin


【解决方案1】:

您不能将List 直接转换为ArrayList。如果你想将List 转换为ArrayList,你可以这样做:

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

【讨论】:

    【解决方案2】:

    这对你有帮助

    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)
    

    输出:

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

    【讨论】:

      【解决方案3】:

      使用 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)
      }
      

      try yourself

      【讨论】:

        猜你喜欢
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多