本问题已经有最佳答案,请猛点这里访问。
如何从Java ARAYLIST中筛选出一些东西,如:
你好吗?
你怎么做
乔
迈克
过滤器是"怎样"的,它可以去除乔和迈克。
这可能有助于stackoverflow.com/questions/122105/…
最好的解决方案是使用其他的收集数据结构,而不是arraylist:code.google.com/p/google-collections
在Java-8中,他们引入了以Predicate为参数的方法removeIf。
所以很容易做到:
List list = new ArrayList<>(Arrays.asList("How are you",
"How you doing",
"Joe",
"Mike"));
list.removeIf(s -> !s.contains("How"));
调用需要API级别24
也许最好的方法是用番石榴
List list = new ArrayList();
list.add("How are you");
list.add("How you doing");
list.add("Joe");
list.add("Mike");
Collection filtered = Collections2.filter(list,
Predicates.containsPattern("How"));
print(filtered);
印刷品
How are you
How you doing
如果要将筛选后的集合作为列表,可以使用此项(也可以从guava获取):
List filteredList = Lists.newArrayList(Collections2.filter(
list, Predicates.containsPattern("How")));
集体2中的2是什么?
DavoudTaghawi Nejad,这可能是因为在标准Java中已经有EDCOX1 1类。所以很明显哪个类是哪个类,如果它们在一个类中使用,那么您不必使用完全限定名来区分它们。
在android中,它不能解决谓词作为谓词时的给出错误。
知道了。。我使用了错误的库..现在我用的是guava-16.0.1.jar
如何过滤不是"如何"的字符串?
@泰美得使用not():filter(list, not(Predicates.containsPattern("How"))。
遍历列表并检查是否包含字符串"how",如果包含字符串,则将其删除。您可以使用以下代码:
// need to construct a new ArrayList otherwise remove operation will not be supported
List list = new ArrayList(Arrays.asList(new String[]
{"How are you?","How you doing?","Joe","Mike"}));
System.out.println("List Before:" + list);
for (Iterator 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);
输出:
List Before: [How are you?, How you doing?, Joe, Mike]
List After: [How are you?, How you doing?]
下一步()在第一次调用它时返回什么?
第一次调用it.next()将返回集合(list)中的第一个项。
我喜欢这个,因为它是最简单的,不涉及第三方图书馆。
给自己写一个过滤函数
public List filter(Predicate criteria, List list) {
return list.stream().filter(criteria).collect(Collectors.toList());
}
然后使用
list = new Test().filter(x -> x > 2, list);
这是Java中最简洁的版本,但是需要JDK 1.8来支持lambda演算。
我同意先前的答案,谷歌的番石榴可能在这里帮助很大,可读性方面:
final Iterables.removeIf(list, new Predicate() {
@Override
public boolean apply(String input) {
if(input.contains("How")) { //or more complex pattern matching
return true;
}
return false;
}
});
请注意,这基本上是一个guava的副本——如何根据谓词从列表中删除,以跟踪删除的内容?
由于您没有给我们太多信息,我假设您编写代码的语言是C。首先:首选System.Collections.Generic.List而不是ArrayList。第二:一种方法是循环遍历列表中的每一项,并检查它是否包含"how"。另一种方法是使用LINQ。下面是一个快速的例子,它过滤掉了所有不包含"如何"的项目:
var list = new List();
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。
@新建大检查编辑历史记录…StAccOfFult.COM/PASS/9146224/修订"Java"标签在该答案之后被添加。