如何使用Predicate过滤列表

时间:2012-03-26 18:38:39

标签: java

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);
        }
    }

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

2 个答案:

答案 0 :(得分:10)

我假设Predicate来自Guava?如果是这样,您可以使用Iterables.filter

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

然后根据需要建立一个列表:

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

...但是我只 建议将它复制到另一个列表中,如果你真的希望它作为列表。如果你只是要迭代它(只有一次),坚持迭代。

答案 1 :(得分:4)

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