【问题标题】:how to put items of different sized lists as class parameters?如何将不同大小的列表项作为类参数?
【发布时间】:2019-11-13 13:03:08
【问题描述】:

我必须使用一个类作为 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) 语句。我想知道一种更简单的方法。

【问题讨论】:

  • 能否请您添加一个您想象中的示例?
  • 是添加列表作为参数还是添加列表中的项目作为参数?在第二种情况下,列表项与您班级中的字段有什么关系?
  • @Neo 抱歉,已编辑
  • @Froyo 抱歉已编辑
  • 后续问题:这些字段是否也从数据库中写入或读取?

标签: android list class kotlin android-room


【解决方案1】:

以下解决方案只是另一个构造函数:

@Entity
data class Riga(
    @PrimaryKey var dataengNuova: String?=null,
    var dataengVecchia: Long?=null,
    var numggeng: Long?=null,
    ...
) {

  constructor(values: List<Int>) : this(
     values.getOrNull(0),
     values.getOrNull(1),
     values.getOrNull(2),
     ...
  )
}

所以传递一个列表会初始化这个类。如果无法编辑实体,请使用相同的方法创建构建器/工厂。

【讨论】:

  • 非常好!这是一个非常有趣的解决方案!也许这更干净` var obj=Riga(list.getOrNull(0),list.getOrNull(1)...list.getOrNull(20)) ` 无需修改列表或类!完美的!谢谢你!
【解决方案2】:

解决了,很容易。我已将列表预处理为二十个项目。欢迎提供更好的解决方案。

var list=mutableListOf<Int?>(2,4,5)
repeat(20 - list.size){ list.add(null) }

【讨论】:

  • 你如何用这个列表实例化一个Riga?将最后四行替换为 repeat(20 - list.size){ list.add(null) } 可能会更简洁一些。
  • @Tenfour04 var obj=Riga(list[0],list[1]...list[20]) 谢谢!重复的乐趣是锦上添花。根据您的建议编辑答案
猜你喜欢
  • 2020-08-16
  • 1970-01-01
  • 2017-05-20
  • 2016-04-04
  • 2016-11-27
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多