ArrayList filter
本问题已经有最佳答案,请猛点这里访问。
如何从Java ARAYLIST中筛选出一些东西,如:
过滤器是"怎样"的,它可以去除乔和迈克。
在Java-8中,他们引入了以
所以很容易做到:
1 2 3 4 5 | List<String> list = new ArrayList<>(Arrays.asList("How are you", "How you doing", "Joe", "Mike")); list.removeIf(s -> !s.contains("How")); |
也许最好的方法是用番石榴
1 2 3 4 5 6 7 8 9 | 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); |
印刷品
1 2 | How are you How you doing |
如果要将筛选后的集合作为列表,可以使用此项(也可以从guava获取):
1 2 | List<String> filteredList = Lists.newArrayList(Collections2.filter( list, Predicates.containsPattern("How"))); |
遍历列表并检查是否包含字符串"how",如果包含字符串,则将其删除。您可以使用以下代码:
1 2 3 4 5 6 7 8 9 | // 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); |
输出:
给自己写一个过滤函数
1 2 3 | public List<T> filter(Predicate<T> criteria, List<T> list) { return list.stream().filter(criteria).collect(Collectors.<T>toList()); } |
然后使用
1 | list = new Test().filter(x -> x > 2, list); |
这是Java中最简洁的版本,但是需要JDK 1.8来支持lambda演算。
我同意先前的答案,谷歌的番石榴可能在这里帮助很大,可读性方面:
1 2 3 4 5 6 7 8 9 | 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的副本——如何根据谓词从列表中删除,以跟踪删除的内容?
由于您没有给我们太多信息,我假设您编写代码的语言是C。首先:首选System.Collections.Generic.List而不是ArrayList。第二:一种方法是循环遍历列表中的每一项,并检查它是否包含"how"。另一种方法是使用LINQ。下面是一个快速的例子,它过滤掉了所有不包含"如何"的项目:
1 2 3 4 5 6 7 8 9 10 11 12 | 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(); |