【问题标题】:Convert an ArrayMap to ArrayList - Kotlin将 ArrayMap 转换为 ArrayList - Kotlin
【发布时间】:2017-07-03 05:23:54
【问题描述】:

我有一个 ArrayMap,我想要一个 Chat 列表来创建和 recyclerview。

val chats : ArrayMap<String,Chat>? = ArrayMap()

RecyclerView.Adapter

class ChatAdapter(var chats : ArrayList<Chat>){
   .
   .
   .
}

我从 firebase 得到这个 ArrayMap。获取 ArrayList 的最佳方法是什么?

【问题讨论】:

    标签: kotlin kotlin-android-extensions


    【解决方案1】:

    您不应该在公共构造函数中使用 ArrayList(因为那样您就完全依赖于该实现)。应该是MutableList接口:

    class ChatAdapter(var chats : MutableList<Chat>){
    

    我猜ArrayMap 是通常的Map(因为我不知道那个类)。 你可以写

    val chats : ArrayMap<String,Chat>? = ArrayMap()
    // ... initialize the chat
    val adapter = ChatAdapter(am.values.toMutableList())
    

    如果你因为某种原因真的需要ArrayList类,你可以写

    val adapter = ChatAdapter(ArrayList(am.values))
    

    【讨论】:

    • 我无法理解这个“你不应该在公共构造函数中使用 ArrayList (因为那样你就完全依赖于那个实现了)。”,但是你的第二个解决方案有效:val adapter = ChatAdapter (ArrayList(am.values))
    • 我找到了另一个解决方案:ChatAdapter(user.chats.map { it.value } as ArrayList)
    • ArrayList 是一个实现,MutableList 是一个接口。如果可能,请始终使用界面,例如在您的情况下,使用构造函数中的接口。因为那时您可以将任何实现(作为 ArrayList)传递给您的 ChatAdapter。否则你可以只传递一个 ArrayList。
    • 我不会使用 user.chats.map { it.value } 作为 ArrayList 因为这比 ArrayList(am.values) 有更多的运行时开销
    • 是的,这个描述得很好。
    【解决方案2】:

    如果你不需要明确的 ArrayList,你可以像这样使用ArrayMap.map() 函数:

    val chats : ArrayMap<String,Chat>? = ArrayMap()
    val list : List<Chat> = chats.map { it.value }
    

    【讨论】:

    • 我在已检查的解决方案中对此发表了评论。
    • 谢谢。我已经认为它在运行时可能会更昂贵,但不确定,所以我认为看到另一种可能的方式可能不会有什么坏处。至少我猜这不是完全错误的。
    猜你喜欢
    • 2020-01-16
    • 2022-01-02
    • 2020-05-13
    • 2021-10-13
    • 2021-03-13
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多