回答
也许最好的方法是使用Guava
List<String> list = new ArrayList<String>();
list.add("How are you");
list.add("How you doing");
list.add("Joe");
list.add("Mike");
Collection<String> filtered = Collections2.filter(list,
Predicates.containsPattern("How"));
print(filtered);
打印
How are you
How you doing
如果你想过滤的集合作为一个列表,你可以使用这个(也番石榴):
List<String> filteredList = Lists.newArrayList(Collections2.filter(
list, Predicates.containsPattern("How")));
Collections2中的2是什么? – 2014-01-07 19:20:23
@ DavoudTaghawi - 内贾德这可能是因为已经有'在标准的Java类Collections'。因此,很清楚哪些类是哪一类,如果它们在一个类中使用,则不必使用完全限定的名称来区分它们。 – user219882 2014-01-08 21:45:21
它给人的谓语错误作谓语不能在android系统解决.. – karan421 2014-02-06 11:34:18
由于您没有给我们提供太多的信息,我假设您正在编写代码的语言是C#。首先:首选ArrayList上的System.Collections.Generic.List。其次:一种方法是遍历列表中的每个项目,并检查它是否包含“如何”。另一种方法是使用LINQ。下面是过滤掉不包含“如何”每一个项目一个简单的例子:
var list = new List<string>();
list.AddRange(new string[] {
"How are you?",
"How you doing?",
"Joe",
"Mike", });
foreach (string str in list.Where(s => s.Contains("How")))
{
Console.WriteLine(str);
}
Console.ReadLine();
“当你没有给我们非常多的信息”,但你的信息,帖子被标记为Java。 – 2016-08-05 04:57:41
@NeonWarge检查编辑历史... http://stackoverflow.com/posts/9146224/revisions“Java”的标签,后来这个答案后加入。 – 2016-12-06 05:09:13
迭代通过列表,并检查是否包含你的字符串“如何”,如果它不然后取出。您可以使用下面的代码:
// need to construct a new ArrayList otherwise remove operation will not be supported
List<String> list = new ArrayList<String>(Arrays.asList(new String[]
{"How are you?", "How you doing?","Joe", "Mike"}));
System.out.println("List Before: " + list);
for (Iterator<String> it=list.iterator(); it.hasNext();) {
if (!it.next().contains("How"))
it.remove(); // NOTE: Iterator's remove method, not ArrayList's, is used.
}
System.out.println("List After: " + list);
OUTPUT:
List Before: [How are you?, How you doing?, Joe, Mike]
List After: [How are you?, How you doing?]
第一次调用it.next()会返回什么? – ArtOfWarfare 2012-09-04 15:41:41
第一次调用'it.next()'返回集合(列表)中的第一个项目。 – anubhava 2012-09-04 17:23:51
我喜欢这个,因为它是最简单的一个,不涉及第三方库。 – Christopher 2016-05-03 10:49:00
我以前的答案是Google Guava大概帮助了很多在这里,可读性明智同意:
final Iterables.removeIf(list, new Predicate<String>() {
@Override
public boolean apply(String input) {
if(input.contains("How")) { //or more complex pattern matching
return true;
}
return false;
}
});
请注意,这是基本的Guava - How to remove from a list, based on a predicate, keeping track of what was removed?
重复写你自己的过滤功能
public List<T> filter(Predicate<T> criteria, List<T> list) {
return list.stream().filter(criteria).collect(Collectors.<T>toList());
}
然后用
list = new Test().filter(x -> x > 2, list);
这是在Java中最整齐的版本,但需要JDK 1.8,支持演算
- 1. Java:高效的ArrayList过滤?
- 2. RXJava2 | Android:过滤arrayList并跟踪过滤器
- 3. 通过元素属性的Java ArrayList的过滤器
- 4. 使用字符串作为过滤器从另一个ArrayList中过滤新的ArrayList
- 5. 过滤器和过滤器
- 6. Django的过滤器 - 根据过滤器
- 7. 如何过滤自定义ArrayList
- 8. ArrayList过滤不起作用:Android
- 9. 滞后过滤ArrayList和对RecyclerView
- 10. 过滤器和-ms-过滤器
- 11. Servlet过滤器 - 不要将过滤器应用于特定的过滤器
- 12. Mysql的过滤器
- 13. 过滤器的Javascript
- 14. Excel的过滤器
- 15. SqlDataProvider过滤器
- 16. 有过滤器
- 17. TreeView过滤器
- 18. NSPredicate过滤器
- 19. 过滤器+ ElemMatch
- 20. adoQuery过滤器
- 21. Tableau过滤器
- 22. 过滤器collection_select
- 23. 过滤器是
- 24. 过滤器DF
- 25. 在使用php时添加过滤器参数到流过滤器://过滤器
- 26. vba中的现有过滤器的自动过滤器
- 27. GlobalFilterCollection的过滤器在ControllerInstanceFilterProvider的过滤器之前运行
- 28. 过滤器过滤用数据
- 29. 使用createdOn过滤器过滤结果
- 30. 蟒蛇过滤器重写过滤
这可能帮助HTTP://计算器。COM /问题/ 122105/Java的东西,是最最好的方式 - 至 - 过滤器 - 一个收集 – 2012-02-05 01:50:53
最好的解决办法是使用一些其他集合的数据结构,而不是一个ArrayList:http://code.google。 COM/p /谷歌的集合/ – 2012-02-05 01:50:55