如何将不同大小的列表项作为类参数?

问题描述 投票:0回答:2

我必须使用一个类作为android房间实体。我想实例化将每个列表项作为参数的每个对象。每个对象都有一个大小不同的列表。

@Entity
data class Riga(
    @PrimaryKey var dataengNuova: String?=null,
    var dataengVecchia: Long?=null,
    var numggeng: Long?=null,
    var dataitaVecchia: Long?=null,
    var dataitaNuova: Long?=null,
    var numggita: Long?=null,
    var dataudioNuova: Long?=null,
    var dataudioVecchia: Long?=null,
    var numggaudio: Long?=null
    var datangVecchia: Long?=null,
    var numggng: Long?=null,
    var dataitaecchia: Long?=null,
    var dataitauova: Long?=null,
    var numggia: Long?=null,
    var dataudoNuova: Long?=null,
    var datauoVecchia: Long?=null,
    var numggadio: Long?=null
    var numgia: Long?=null,
    var dataudNuova: Long?=null,
    var datauoecchia: Long?=null,
    var numggdio: Long?=null)

我怎么做,而每个对象的列表都有不同的大小?

我想要这样的东西:

var firstObjectParams= listOf(1,2,4,6)
var secondObjectParams= listOf(6,79,4657,7885,56777,5657,5677,6776)

类似这样:

obj1=Riga('hg',1,2,4,6)
obj2=Riga('hk',6,79,4657,7885,56777,5657,5677,6776)

但是我有数百个列表,包含1至20个项目。

我知道我可以写20条if (list.size==number)语句。我在想一种更简单的方法。

android list class kotlin android-room
2个回答
1
投票

我认为没有简单的方法可以做到这一点。另外,在您要添加/删除变量的情况下,使用Map<String, Long>可能是更好的方法。

fun createRiga(params: List<Long>): Riga {
  val newParams = mutableListOf<Long?>()
  for (i in 0 until 20) {
    if (params.size > i) {
      newParams.add(params[i]) 
    } else {
      newParams.add(null)
    }
  }

  return Riga(newParams[0], newParams[1], newParams[2], .....) 
}

同样,更好的解决方案是使用地图。

带有地图,

data class Riga(val id: Int, val params: Map<String, Long>)

自从您提到以来,您正在从HTML解析中获取这些值,所以您也将具有一些参数来解析这些值。您可以使用参数作为键。


0
投票

解决了,很容易。我已经预处理了二十个项目清单。欢迎提供更好的解决方案。

var list=mutableListOf<Int?>(2,4,5)
repeat(20 - list.size){ list.add(null) }
© www.soinside.com 2019 - 2024. All rights reserved.