关于java:如何使用Predicate过滤列表

How to filter list using Predicate

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
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);
        }
    }

我有一个字符串列表,我想按指定的字符串筛选它,以便返回的值只包含指定字符串的列表。我将使用上面提到的谓词,但不确定如何应用它来筛选列表


我假设这里的Predicate是从瓜瓦岛来的?如果是这样,您可以使用Iterables.filter

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

如果你想的话,就从中建立一个列表:

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

…但如果你真的想把它作为一个列表,我只建议把它复制到另一个列表。如果您只需要对它进行迭代(并且只迭代一次),那么请坚持使用iterable。


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