Как я могу разложить объект и кратко добавить его в список? - PullRequest
1 голос
/ 10 октября 2019

Если у меня есть класс, например

data class Departments (
  val customerFacing: Commercial,  
  val warehouse: Operational,
  val accounting: Auditing) 

Есть ли более похожий на Kotlin способ добиться следующего?

val list: MutableList<Sections<*>> = arrayListOf()
if(deparments.customerFacing != null) {  
   list.add(Section(manager, deparments.customerFacing)
}
if(deparments.warehouse != null) {  
   list.add(Section(manager, deparments.warehouse)
}
if(deparments.accounting != null) {  
   list.add(Section(manager, deparments.accounting)
}


data class Section<T>(val manager: String, val section: T)

Ответы [ 2 ]

3 голосов
/ 10 октября 2019

На основании определения класса Departments его свойства не могут быть нулевыми, поэтому вам не нужно проверять нулевое значение. Но если бы они были:

data class Departments (
  val customerFacing: Commercial?,  
  val warehouse: Operational?,
  val accounting: Auditing?) 

Вам не нужно использовать if, вы можете использовать оператор ?. для безопасных вызовов.

deparments.customerFacing?.let{list.add(Section(manager, it)}
deparments.warehouse?.let{list.add(Section(manager, it)}
deparments.accounting?.let{list.add(Section(manager, it)}

Выполнитьесли не ноль

1 голос
/ 10 октября 2019

Как упоминалось в @alfcope, если поля отделов могут быть нулевыми, они должны быть смоделированы как обнуляемые типы.

Вы можете сделать следующее:

val result = listOf(departments)
    .flatMap { listOfNotNull(it.customerFacing, it.warehouse, it.accounting) }
    .map { Session(manager, it) } 
...