java arraylist 过滤_关于java:ArrayList过滤器

本问题已经有最佳答案,请猛点这里访问。

如何从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"标签在该答案之后被添加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值