如何使用谓词过滤列表[重复]
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?