【问题标题】:More idiomatic way to initialize this kotlin list?更惯用的方式来初始化这个 kotlin 列表?
【发布时间】:2018-12-06 12:26:32
【问题描述】:

我想要一个不可变的列表,因为我并不真正需要可变性,所以它可能只会导致错误。但是,该列表是在类级别声明的lateinit var

我想最初用循环中的值填充列表,有点像这样:

for (items in someOtherCollection) {
    val itemToAdd = doSomeProcessingOnThisData()
    list.add(itemToAdd)
}

但是,由于列表是不可变的,我不能调用add()。有没有更好的方法来初始化这样的列表,而不是简单地将所有值添加到第二个可变列表中,然后将其分配给不可变列表?

我目前的解决方案是这样的,但它似乎效率低下:

val tmpList = mutableListOf<Data>()
foos.forEach() {
    val itemToAdd = doSomeProcessing()
    foos.add(itemToAdd)
}
this.list = tmpList

【问题讨论】:

  • FWIW:您当前的解决方案没有什么低效的地方。
  • 我猜是这样,因为第一个列表从未真正初始化 - 它只是稍后分配的。使用两个列表只是感觉很脏,尽管我想我在技术上不是。

标签: list kotlin immutability idioms


【解决方案1】:

如果你想创建一个新列表来处理另一个集合中的一些数据,试试这个:

this.list = someOtherCollection.map {
    doSomeProcessing()
}

阅读本文以更好地理解:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/map.html

【讨论】:

  • 天啊!我知道!很难让自己进行功能性思考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2016-12-11
  • 2021-11-12
  • 1970-01-01
  • 2015-05-17
  • 2011-05-17
相关资源
最近更新 更多