Answers:
使用distinct扩展功能:
val a = arrayOf("a", "a", "b", "c", "c")
val b = a.distinct() // ["a", "b", "c"]
还有一项distinctBy功能,允许您指定如何区分项目:
val a = listOf("a", "b", "ab", "ba", "abc")
val b = a.distinctBy { it.length } // ["a", "ab", "abc"]
正如@ mfulton26建议的那样,您也可以使用toSet,toMutableSet如果不需要保留原始顺序,也可以使用toHashSet。这些函数产生a Set而不是a,List并且应该比效率更高distinct。
您可能会发现有用的:
toSet或toMutableSet,其开销要小于distinct和如果订购无关紧要,则可以使用toHashSet。
to*Set比更有效(空间和时间)distinct[By],因为它返回的Set,而不是直接使用Set内部并将其转换为一个List作为它的返回值和2)distinctBy是比distinct仅仅因为可以避免完整的对象相等性比较而效率更高。两者都是有效点。我赞同您的说法,“肯定不是总是有开销的”,而我在答复时却忽略了您distinct与distinctBy(而不是与to*Set)进行比较。
Iterable.distinct实际上是在toMutableSet().toList()内部进行的。因此,不必担心性能问题:-)