Убрать дубликаты и оставить уникальные значения в коллекции

Как можно избавиться от дубликатов, сохранив при этом все уникальные записи?
Есть список состоящий из моделей:

data class State(val name:String, val yearId:Int)

Входные данные выглядят так (массив моделей):

  1. State("Первый", 3)
  2. State("Первый", 1)
  3. State("Первый", 1)
  4. State("Первый", 2)
  5. 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())
}
→ Ссылка