如何使用谓词过滤列表[重复]

Posted

技术标签:

【中文标题】如何使用谓词过滤列表[重复]【英文标题】: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 【参考方案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 感谢您的澄清,我编辑了我的答案。

以上是关于如何使用谓词过滤列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 stream().reduce() 基于谓词从一个列表中创建 2 个列表 [重复]

如何根据用户输入使用新谓词重新运行@FetchRequest?

使用谓词对核心数据进行排序以消除重复

使用谓词列表时出现 DataContract SerializationException

如何使用 Vue.js 对 ajax 重复列表应用过滤器?

如何使用Spring Cloud Gateway,99%的人都不知道!