Kotlin 中检查列表的最佳方式是独一无二的

Optimal way to check list in Kotlin is unique

检查列表(或可迭代)的值是否唯一的最佳方法是什么?我一直在寻找建议 distinct()distinctBy {} 的答案,但我不想修改列表,只是想检查一下。

模型用例:用户正在添加一些数据,在保存它们之前我需要验证唯一性,但是如果验证失败我无法确定要删除哪些数据(它们可能包含其他数据,例如用户注释),我只需要告诉用户输入无效以及原因,让他们决定要删除哪些项目。

我的解决方案是这样的:

  list.groupBy { it.id }.none { it.value.size > 1 }

但我想知道是否有更好(更像 Kotlin)的方法,也许是一些库函数 &c。

注意:我无法确保数据具有 equals 和 hashCode 实现,因此将它们放入集合并比较大小的明显方法不适用。

开始为 Nicolas 的评论写一个答案,然后我觉得很简单:

list.map { it.id }.let { ids -> ids.size == ids.toSet().size }

应该可以解决问题。

如果你不能将数据作为一个整体进行比较,但你可以比较 ID,那么你可以将它们放在一个集合中!

list.map { it.id }.toSet().size == list.size

我的意思是你检查的确实正确,有多少个唯一 ID