【问题标题】:How to filter list using Predicate [duplicate]如何使用谓词过滤列表[重复]
【发布时间】:2012-04-10 06:58:06
【问题描述】:
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);
        }
    }

我有一个字符串列表,我想通过指定的字符串对其进行过滤,因此返回的值包含一个仅包含指定字符串的列表。我打算使用上述谓词,但不确定如何应用它来过滤列表

【问题讨论】:

  • 看看这个SO queston——听起来正是你所追求的。
  • 您使用的是Guava 还是org.apache.commons.collections.Predicate

标签: java


【解决方案1】:

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

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

如果你愿意,可以根据需要建立一个列表:

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

...但我建议如果您确实希望将其作为列表复制到另一个列表。如果您只是要迭代它(并且只迭代一次),请坚持使用可迭代对象。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 澄清一下,Guava 的方法返回一个 view,这是一种新的集合,但没有明确地进行构造。
    • @LouisWasserman 感谢您的澄清,我编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多