在 Java 中,我可以使用以下代码从列表中删除项目:
private void filterList(List<Item> items) {
Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
if (checkItem(iterator.next())) {
iterator.remove();
}
}
}
如何在 Kotlin 中做同样的事情(即删除 List
中的一些项目而不重新创建)?
最佳答案
只需使用 .retainAll { ... }
或 .removeAll { ... }
,都接受一个谓词,就地过滤它:
items.retainAll { shouldRetain(it) }
items.removeAll { shouldRemove(it) }
请注意 items
应该是 MutableList<T>
为此,不仅仅是List<T>
,它是 Kotlin 中的只读列表,因此不公开任何变异函数(参见语言引用中的 Collections)。
顺便说一句,对于支持随机访问的列表,这两个函数是有效实现的:那么在删除每个项目后列表不会被压缩(O(n2) 时间最坏情况),而是在处理列表时将项目在列表中移动,给了 O(n) 时间。
如果您不想修改原始列表,您可以使用 .filter { ... }
生成一个单独的集合,其中仅包含您想要保留的项目。或 .filterNot { ... }
,这将适用于只读 List<T>
还有:
val filtered = items.filter { shouldRetain(it) }
val filtered = items.filterNot { shouldRemove(it) }
关于list - 如何使用 Kotlin 就地过滤列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44674532/