回答
也許最好的方法是使用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