Làm thế nào bạn có thể lọc ra một cái gì đó từ một ArrayList Java như thế nào nếu bạn có:ArrayList lọc
- How are you
- Làm thế nào bạn làm
- Joe
- Mike
Và bộ lọc là "Làm thế nào" nó sẽ loại bỏ Joe và Mike.
Làm thế nào bạn có thể lọc ra một cái gì đó từ một ArrayList Java như thế nào nếu bạn có:ArrayList lọc
Và bộ lọc là "Làm thế nào" nó sẽ loại bỏ Joe và Mike.
Có lẽ cách tốt nhất là sử dụng Guava
List<String> list = new ArrayList<String>();
list.add("How are you");
list.add("How you doing");
list.add("Joe");
list.add("Mike");
Collection<String> filtered = Collections2.filter(list,
Predicates.containsPattern("How"));
print(filtered);
in
How are you
How you doing
Trong trường hợp bạn muốn để có được những bộ sưu tập được lọc như một danh sách, bạn có thể sử dụng này (cũng từ Ổi):
List<String> filteredList = Lists.newArrayList(Collections2.filter(
list, Predicates.containsPattern("How")));
2 trong Bộ sưu tập2 là gì? –
@ DavoudTaghawi-Nejad Đó có thể là do đã có lớp 'Bộ sưu tập' trong Java chuẩn. Vì vậy, rõ ràng là lớp nào là lớp và bạn không phải sử dụng tên đủ điều kiện để phân biệt giữa chúng trong trường hợp chúng được sử dụng trong một lớp. – user219882
lỗi của nó trên Predicates như Predicate không thể được giải quyết trong android .. – karan421
Vì bạn không cung cấp cho chúng tôi nhiều thông tin, tôi giả sử ngôn ngữ bạn đang viết mã là C#. Trước hết: Ưu tiên System.Collections.Generic.List trên một ArrayList. Thứ hai: Một cách sẽ là lặp qua tất cả các mục trong danh sách và kiểm tra xem nó có chứa "Cách" hay không. Một cách khác là sử dụng LINQ. Dưới đây là ví dụ nhanh để lọc ra tất cả các mục không chứa "Cách":
var list = new List<string>();
list.AddRange(new string[] {
"How are you?",
"How you doing?",
"Joe",
"Mike", });
foreach (string str in list.Where(s => s.Contains("How")))
{
Console.WriteLine(str);
}
Console.ReadLine();
"Vì bạn không cung cấp cho chúng tôi nhiều thông tin", nhưng có thông tin của bạn, bài đăng được gắn thẻ với Java. –
@NeonWarge kiểm tra lịch sử chỉnh sửa ... http://stackoverflow.com/posts/9146224/revisions Thẻ "Java" đã được thêm sau sau câu trả lời này. –
Lặp lại danh sách và kiểm tra xem có chứa chuỗi của bạn "Cách" và nếu có thì xóa. Bạn có thể sử dụng đoạn mã sau:
// need to construct a new ArrayList otherwise remove operation will not be supported
List<String> list = new ArrayList<String>(Arrays.asList(new String[]
{"How are you?", "How you doing?","Joe", "Mike"}));
System.out.println("List Before: " + list);
for (Iterator<String> it=list.iterator(); it.hasNext();) {
if (!it.next().contains("How"))
it.remove(); // NOTE: Iterator's remove method, not ArrayList's, is used.
}
System.out.println("List After: " + list);
OUTPUT:
List Before: [How are you?, How you doing?, Joe, Mike]
List After: [How are you?, How you doing?]
it.next() trả về lần đầu tiên nó được gọi là gì? – ArtOfWarfare
Gọi 'it.next()' lần đầu tiên trả về mục đầu tiên từ bộ sưu tập (danh sách). – anubhava
Tôi thích cái này vì nó là cái đơn giản nhất mà không liên quan đến thư viện của bên thứ ba. – Christopher
Tôi đồng ý với một câu trả lời trước đó Google Guava có lẽ giúp rất nhiều ở đây, khả năng đọc-khôn ngoan:
final Iterables.removeIf(list, new Predicate<String>() {
@Override
public boolean apply(String input) {
if(input.contains("How")) { //or more complex pattern matching
return true;
}
return false;
}
});
Xin lưu ý rằng đây là cơ bản là một bản sao của Guava - How to remove from a list, based on a predicate, keeping track of what was removed?
viết tự của bạn một chức năng lọc
public List<T> filter(Predicate<T> criteria, List<T> list) {
return list.stream().filter(criteria).collect(Collectors.<T>toList());
}
Và sau đó sử dụng
list = new Test().filter(x -> x > 2, list);
Đây là phiên bản gọn gàng nhất trong Java, nhưng cần JDK 1.8 để hỗ trợ phép tính lambda
này có thể giúp http: // stackoverflow.com/questions/122105/java-what-là-the-best-way-to-filter-a-bộ sưu tập –
giải pháp tốt nhất là sử dụng một số cấu trúc dữ liệu bộ sưu tập khác thay vì một danh sách mảng: http://code.google. com/p/google-collections/ –