Chỉ cần sử dụng .retainAll { ... }
hoặc .removeAll { ... }
, cả hai chấp nhận một vị ngữ, để lọc nó tại chỗ:
items.retainAll { shouldRetain(it) }
items.removeAll { shouldRemove(it) }
Lưu ý rằng items
phải là một MutableList<T>
cho rằng, không chỉ List<T>
, đó là một danh sách chỉ đọc trong Kotlin và do đó không tiếp xúc với bất kỳ chức năng đột biến nào (xem: Collections trong tài liệu tham khảo ngôn ngữ).
Bằng cách này, hai chức năng này được thực hiện một cách hiệu quả cho các danh sách có hỗ trợ truy cập ngẫu nhiên: sau đó danh sách không đầm sau mỗi mục được lấy ra (O (n) Hiện trường hợp xấu nhất), và thay vào đó các mục được di chuyển trong danh sách khi nó được xử lý, cho thời gian O (n).
Và nếu bạn không muốn thay đổi danh sách ban đầu, bạn có thể tạo ra một bộ sưu tập riêng biệt với chỉ các mục mà bạn muốn giữ lại sử dụng .filter { ... }
hoặc .filterNot { ... }
, điều này sẽ làm việc cho read-only List<T>
cũng :
val filtered = items.filter { shouldRetain(it) }
val filtered = items.filterNot { shouldRemove(it) }
tại sao android thẻ? – user7294900
chỉ cần sao chép mã này vào tệp kotlin, IDE tự động làm điều đó cho bạn. – chandil03