2012-03-26 69 views
7
private static class FilterByStringContains implements Predicate<String> { 
     private String filterString; 
     private FilterByStringContains(final String filterString) { 
      this.filterString = filterString; 
     } 
     @Override 
     public boolean apply(final String string) { 
      return string.contains(filterString); 
     } 
    } 

Tôi có danh sách các chuỗi, tôi muốn lọc nó theo chuỗi được chỉ định để giá trị trả về chỉ chứa một danh sách các chuỗi được chỉ định. Tôi sẽ sử dụng vị từ như trên nhưng không chắc chắn cách áp dụng điều này để lọc danh sáchCách lọc danh sách bằng cách sử dụng Predicate

+0

Kiểm tra [SO queston] này (http://stackoverflow.com/questions/587404/java-finding-objects-in-collections) - âm thanh giống như chính xác những gì bạn đang theo dõi. – Attila

+1

bạn đang sử dụng 'Guava' hoặc' org.apache.commons.collections.Predicate'? – phanneman

Trả lời

10

Tôi giả sử số Predicate đây là từ Guava? Nếu vậy, bạn có thể sử dụng Iterables.filter:

Iterable<String> filtered = Iterables.filter(original, predicate); 

Sau đó xây dựng một danh sách từ đó nếu bạn muốn:

List<String> filteredCopy = Lists.newArrayList(filtered); 

... nhưng tôi muốn chỉ gợi ý sao chép nó vào danh sách khác nếu bạn thực sự muốn nó như một danh sách. Nếu bạn chỉ cần lặp lại nó (và chỉ một lần), hãy dính vào iterable.

4

Cách sử dụng phương pháp filter của Guava hoặc phương pháp Apache commons 'filter? Phương thức của Guava trả về một khung nhìn của bộ sưu tập, trong khi Apache Commons sửa đổi bộ sưu tập tại chỗ. Đừng sáng tạo lại bánh xe!

+2

Để làm rõ, phương pháp của Guava trả về một _view_, đó là một bộ sưu tập mới, nhưng không thực hiện công việc một cách rõ ràng. –

+0

@LouisWasserman cảm ơn vì đã làm rõ, tôi đã chỉnh sửa câu trả lời của mình. –

Các vấn đề liên quan