ArrayList过滤器

kev*_*c45 38 java collections arraylist

如何从Java ArrayList中过滤掉一些内容,如果你有:

  1. 你好吗
  2. 你好吗
  3. 麦克风

过滤器是"如何"它将删除乔和迈克.

Ale*_* C. 57

,他们引入了removeIf一个带Predicate参数的方法.

所以很容易:

List<String> list = new ArrayList<>(Arrays.asList("How are you",
                                                  "How you doing",
                                                  "Joe",
                                                  "Mike"));
list.removeIf(s -> !s.contains("How"));
Run Code Online (Sandbox Code Playgroud)

  • 呼叫需要API级别24 (6认同)

use*_*882 53

可能最好的方法是使用番石榴

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);
Run Code Online (Sandbox Code Playgroud)

版画

How are you
How you doing
Run Code Online (Sandbox Code Playgroud)

如果您想将过滤后的集合作为列表获取,可以使用此(也来自Guava):

List<String> filteredList = Lists.newArrayList(Collections2.filter(
    list, Predicates.containsPattern("How")));
Run Code Online (Sandbox Code Playgroud)

  • Collections2 中的 2 是什么? (2认同)

anu*_*ava 27

遍历列表并检查是否包含字符串"How",如果包含,则删除.您可以使用以下代码:

// 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);
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

List Before: [How are you?, How you doing?, Joe, Mike]
List After: [How are you?, How you doing?]
Run Code Online (Sandbox Code Playgroud)


MG.*_*MG. 7

写你自己的过滤功能

 public List<T> filter(Predicate<T> criteria, List<T> list) {
        return list.stream().filter(criteria).collect(Collectors.<T>toList());
 }
Run Code Online (Sandbox Code Playgroud)

然后使用

    list = new Test().filter(x -> x > 2, list);
Run Code Online (Sandbox Code Playgroud)

这是Java中最整洁的版本,但需要JDK 1.8才能支持lambda演算