Удалить оба равных между собой Kotlin bean, классов по значению
Есть два List, есть Kotlin bean, и в между собой в два List, если есть похожие между собой значения по fullTime, удалить в обоих List.
class Time(
var fullTime: String,
var date: Calendar,
var hour: Int,
var minute: Int,
var inMillis: Long,
var day: Int
)
Например [1,3,5,6] и есть второй лист, там значения [3] И получается нужно получить список в виде [1,5,6]
Ответы (2 шт):
Автор решения: Vadik
→ Ссылка
Определим equals и hashCode для класса Time следующим образом:
class Time(
var fullTime: String,
...
) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
return fullTime == (other as Time).fullTime
}
override fun hashCode(): Int {
return fullTime.hashCode()
}
}
После чего мы можем складывать объекты класса Time не только в List, но и в Set, и выполнить операцию minus:
val set1 = list1.toSet() // [1, 3, 5, 6]
val set2 = list2.toSet() // [3, 4]
val result = set1.minus(set2) // => [1, 5, 6]
Метод minus реализует разность множеств.
Автор решения: Vadik
→ Ссылка
Есть два списка:
val list1: List<Time> // [1, 3, 5, 6]
val list2: List<Time> // [3, 4]
Из второго списка сделаем сет значений fullTime:
val set2 = list2.map { it.fullTime }.toSet()
После чего воспользуемся методом filter:
val result = list1.filter { it.fullTime !in set2 } // => [1, 5, 6]