2012-03-26 131 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); 
     } 
    } 

我有一个字符串列表,我想通过指定的字符串进行过滤,所以返回的值只包含指定字符串的列表。我打算使用上面的谓词,但不知道如何应用这个来过滤列表如何使用谓词过滤列表

+0

看看这个[SO queston](http://stackoverflow.com/questions/587404/java-finding-objects-in-collections) - 听起来就像你以后的样子。你使用'Guava'还是'org.apache.commons.collections.Predicate'? – Attila 2012-03-26 18:45:38

+1

? – phanneman 2012-03-26 18:48:32

回答

10

我假设Predicate这里是从Guava?如果是这样,你可以使用Iterables.filter

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

然后从建立一个列表,如果你想:

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

...但我只建议将它复制到你的另一个列表实际上希望它成为一个列表。如果你只是要遍历它(并且只有一次),请坚持迭代。

4

如何使用Guava的filter方法或Apache公共的'filter方法? Guava的方法返回集合的视图,而Apache Commons'就地修改集合。不要重新发明轮子!

+2

为了澄清,番石榴的方法返回一个_view_,这是一个新的集合,但没有明确的构造。 – 2012-03-26 18:57:10

+0

@LouisWasserman谢谢澄清,我编辑了我的答案。 – 2012-03-26 19:03:43