Наша задача - отсортировать списки по дате, но проблема в том, что они бывают разных типов. Поэтому нам нужно исправить это с помощью другого типа / класса, который будет иметь данные обоих классов. Тогда мы сможем отсортировать наш новый список комбинированного типа.
Давайте сначала воссоздаем проблему: предположим, у нас есть два типа:
data class DataType1(var title: String, var date: Date)
data class DataType2(var title: String, var date: Date, var someOther: String)
val list1 = mutableListOf <DataType1> ()
val list2 = mutableListOf <DataType2> ()
list1.add(DataType1("Data 1", Date("01/01/2012")))
list1.add(DataType1("Data 2", Date("01/01/2013")))
list1.add(DataType1("Data 3", Date("01/01/2014")))
list2.add(DataType2("Data 21", Date("01/01/2022"), "Other"))
list2.add(DataType2("Data 22", Date("01/01/2010"), "Other"))
list2.add(DataType2("Data 23", Date("01/01/2005"), "Other"))
На этом этапе мы представим новый тип, который здесь FixTypes
.
class FixTypes(private val data1: DataType1?, private val data2: DataType2?) {
lateinit var date: Date
lateinit var title: String
var someOther: String? = null // those are not common field can be null
init {
if (data1 != null) {
date = this.data1.date
title = this.data1.title
} else if (data2 != null) {
date = this.data2.date
title = this.data2.title
someOther = this.data2.someOther
}
}
}
Затем создайте новый список:
val fixedList = mutableListOf<FixTypes>()
list1.forEach {
val ft = FixTypes(it, null)
fixedList.add(ft)
}
list2.forEach {
val ft = FixTypes(null, it)
fixedList.add(ft)
}
Поскольку мы скопировали данные обоих списков в NewType, мы отсортируем их:
fixedList.sortByDescending { it.date }
fixedList.forEach {
Log.d("TAG", it.date.toString())
}
Наш отсортированный список:
Sat Jan 01 00:00:00 GMT+06:00 2022
Wed Jan 01 00:00:00 GMT+06:00 2014
Tue Jan 01 00:00:00 GMT+06:00 2013
Sun Jan 01 00:00:00 GMT+06:00 2012
Fri Jan 01 00:00:00 GMT+06:00 2010
Sat Jan 01 00:00:00 GMT+06:00 2005
Теперь мы изменим тип списка источников Adapter
на наш вновь созданный тип. Это все.
Еще одна вещь, которую стоит упомянуть: два recycler
вида не будут работать , потому что как вы будете смешивать предметы?