【问题标题】:How to add an item to a list in Kotlin?如何将项目添加到 Kotlin 的列表中?
【发布时间】:2019-04-03 06:18:39
【问题描述】:

我正在尝试将元素列表添加到字符串列表中,但我发现 Kotlin 没有像 java 这样的添加功能,所以请帮助我了解如何将项目添加到列表中。

class RetrofitKotlin : AppCompatActivity() {

    var listofVechile:List<Message>?=null
    var listofVechileName:List<String>?=null
    var listview:ListView?=null
    var progressBar:ProgressBar?=null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_retrofit_kotlin)

        listview=findViewById<ListView>(R.id.mlist)
        var apiInterfacee=ApiClass.client.create(ApiInterfacee::class.java)
        val call=apiInterfacee.getTaxiType()
        call.enqueue(object : Callback<TaxiTypeResponse> {

            override fun onResponse(call: Call<TaxiTypeResponse>, response: Response<TaxiTypeResponse>) {

                listofVechile=response.body()?.message!!
                println("Sixze is here listofVechile   ${listofVechile!!.size}")
                if (listofVechile!=null) {
                    for (i in 0..listofVechile!!.size-1) {

                        //how to add the name only listofVechileName list

                    }
                }
                //println("Sixze is here ${listofVechileName!!.size}")
                val arrayadapter=ArrayAdapter<String>(this@RetrofitKotlin,android.R.layout.simple_expandable_list_item_1,listofVechileName)
                listview!!.adapter=arrayadapter

            }
            override fun onFailure(call: Call<TaxiTypeResponse>, t: Throwable) {

            }
        })
    }
}

【问题讨论】:

  • 嗯?你在说什么清单? Kotlin 列表是 Java 列表,不是吗?如果外国名字让我失望,我很抱歉。
  • @Steve 我在说 var listofVechileName:List?=null 如何在上面添加项目
  • 您需要退后一步,阅读文档以了解 Kotlin 的基础知识,只需阅读文档即可:kotlinlang.org/docs/reference/collections.html
  • 啊,是的……不可变的东西。我只是没有把 2 和 2 放在一起。完美,明显的意义。我还没有做足够的 Kotlin 编码。这与阅读文档无关。相反,它是关于用 Java 完成你的日常工作,并且不得不把你的头脑从其中抽出来,用 Kotlin 思考。
  • 一个简单的答案,你不能直接将项目添加到 List 而不将其转换为可变形式。

标签: list kotlin collections kotlin-android-extensions


【解决方案1】:

更惯用的方法是使用MutableList 而不是专门的ArrayList。你可以声明:

val listOfVehicleNames: MutableList<String> = mutableListOf()

并以这种方式添加。或者,您可能希望更喜欢不变性,并将其声明为:

var listOfVehicleNames: List<String> = emptyList()

在您的完成块中,只需重新分配它:

listOfVehicleNames = response.body()?.message()?.orEmpty()
    .map { it.name() /* assumes name() function exists */ }

【讨论】:

  • 哦,是的,这太明显了!比java容易多了。我很高兴我们换了。
  • @SMBiggs 你的意思是讽刺,不是吗?
  • @TheincredibleJan 是的。引用 TJ Miller 的话,“讽刺的问题在于它很容易被误解。”
【解决方案2】:

谈论一种惯用的方法......?

如果您可以只使用 不可变 列表(这意味着在 Kotlin 中通常),只需使用 +plus。它返回一个新列表 原始列表的所有元素加上新添加的元素:

val original = listOf("orange", "apple")
val modified = original + "lemon" // [orange, apple, lemon]

original.plus("lemon") 产生与original + "lemon" 相同的结果。稍微冗长一些,但在组合多个集合操作时可能会派上用场:

return getFruit()
       .plus("lemon")
       .distinct()

除了添加单个元素,您还可以使用plus 连接整个集合:

val original = listOf("orange", "apple")
val other = listOf("banana", "strawberry")
val newList = original + other // [orange, apple, banana, strawberry]

免责声明:这并没有直接回答 OP 的问题,但我觉得在题为“如何在 Kotlin 中将项目添加到列表中?”的问题中,这是该主题的热门 Google 热门话题,plus 必须提及。

【讨论】:

    【解决方案3】:

    如果您不想或不能直接使用数组列表,请使用此代码添加项目

    itemsList.toMutableList().add(item)
    

    itemlist : 你的物品清单

    item : 你要添加的项目

    【讨论】:

    • 你没有错过作业吗? toMutableList() 创建 itemsList 的副本并且不会更改它,对吧?
    【解决方案4】:

    不要使用不可变的常规列表,只需使用可变的 arrayListof

    所以你的常规列表会变成

    var listofVehicleNames = arrayListOf("list items here")
    

    然后就可以使用添加功能了

    listOfVehicleNames.add("what you want to add")
    

    【讨论】:

      【解决方案5】:

      对于任何特定的课程,以下内容可能会有所帮助

       var newSearchData = List<FIRListValuesFromServer>()
      
              for (i in 0 until this.singleton.firListFromServer.size) {
      
                  if (searchText.equals(this.singleton.firListFromServer.get(i).FIR_SRNO)) {
      
                      newSearchData.toMutableList().add(this.singleton.firListFromServer.get(i))
      
                  }
              }
      

      【讨论】:

        【解决方案6】:

        你应该使用像 ArrayList 这样的 MutableList

        var listofVechileName:List<String>?=null
        

        变成

         var listofVechileName:ArrayList<String>?=null
        

        然后你可以使用方法添加

        https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/add.html

        【讨论】:

        • JB Nizet 说的是真的,但如果我的回答解决了您的问题,请将其标记为正确
        • 我不想改变太多作者,但是有人让我注意到你应该避免初始化为空,最好使用lazeinit
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-26
        • 2017-07-14
        • 2018-04-04
        • 1970-01-01
        • 2016-06-08
        相关资源
        最近更新 更多