Убрать дубликаты и оставить уникальные значения в коллекции
Как можно избавиться от дубликатов, сохранив при этом все уникальные записи?
Есть список состоящий из моделей:
data class State(val name:String, val yearId:Int)
Входные данные выглядят так (массив моделей):
State("Первый", 3)State("Первый", 1)State("Первый", 1)State("Первый", 2)State("Второй", 3)
На примере, необходимо сохранить элементы: 1,2,4,5.
! - Элементы с номером 2 и 3 идентичны, поэтому достаточно сохранить один из них.
Ответы (2 шт):
Автор решения: IR42
→ Ссылка
так как data class уже реализует hashCode и equals, то можно сразу использовать distinct
val list = listOf(State(...), ...)
val newList = list.distinct()
Автор решения: Barmaley
→ Ссылка
Тупая реализация выглядит так:
data class State(val name:String, val yearId:Int) {
override fun hashCode(): Int {
return "$name+$yearId".hashCode()
}
override fun toString(): String {
return "State: name=$name, yearId=$yearId"
}
}
fun main() {
val statesList=ArrayList<State>()
statesList.add(State("Первый", 3))
statesList.add(State("Первый", 1))
statesList.add(State("Первый", 1))
statesList.add(State("Первый", 2))
statesList.add(State("Второй", 3))
val statesSet=HashSet<State>()
for (state in statesList) {
statesSet.add(state)
}
//тестируем
for (state in statesSet) println(state.toString())
}