Respostas:
Use a distinctfunção de extensão :
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
Também existe uma distinctByfunção que permite especificar como distinguir os itens:
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
Como @ mfulton26 sugerido, você também pode usar toSet, toMutableSete, se você não precisa a ordenação original a ser preservado, toHashSet. Essas funções produzem um em Setvez de a Liste devem ser um pouco mais eficientes do que distinct.
Você pode achar útil:
toSetou toMutableSetque têm menos sobrecarga do que distincte se o pedido não importa, você pode usar toHashSet.
to*Seté mais eficiente (espaço e tempo) do que distinct[By]porque retorna o Setdiretamente em vez de usar um Setinternamente e convertê-lo em um Listcomo seu valor de retorno e 2) distinctByé pode ser mais eficiente do que distinctsimplesmente porque você pode evitar a comparação completa da igualdade do objeto. Ambos são pontos válidos. Corri com sua declaração de que "certamente nem sempre tem sobrecarga" e estava respondendo a isso e esqueci que você estava comparando distinctcom distinctBy(e não com to*Set).
Iterable.distinctna verdade o faz toMutableSet().toList()internamente. Portanto, não se preocupe com o desempenho :-)