Java Predicate过滤集合(附带实例)
Java 8 为 Collection 集合新增的一个方法:removeIf(Predicate filter),该方法将会批量删除符合 filter 条件的所有元素。
Predicate 是一种谓词动作接口,也就是一个函数式接口,它可以关联一个具体的方法。通过这个方法可以对集合元素进行过滤操作。在 Java 程序中可使用 Lambda 表达式构建 Predicate 接口对象。
接下来,通过案例来演示 removeIf(Predicate filter) 方法的用法:
通过上面的案例可以了解到 Predicate 的好处,除此之外,在使用 Predicate 时还可以充分简化集合的运算。以 List 集合为例,假设程序有如下 3 个统计需求:
此处所做的也只是一个假设,在实际开发过程中还可能有更多的统计需求。如果还是采用传统的编程方式来完成这些需求,则需要执行 3 次循环,但是采用 Predicate 方式只需要调用一下方法即可,例如:
Predicate 是一种谓词动作接口,也就是一个函数式接口,它可以关联一个具体的方法。通过这个方法可以对集合元素进行过滤操作。在 Java 程序中可使用 Lambda 表达式构建 Predicate 接口对象。
接下来,通过案例来演示 removeIf(Predicate filter) 方法的用法:
import java.util.*;
public class Demo {
public static void main(String[] args) {
List<String> books = new ArrayList<String>();
books.add("AAAJava基本教程");
books.add("AAAC语言入门教程");
books.add("AAAC++基本教程");
books.add("AAAPython基础教程");
books.add("AAALinux入门教程");
books.add("AAAC#基础教程");
books.removeIf(book -> (book).length() < 12); // 删除长度小于12的字符串
System.out.println(books);
}
}
程序的运行结果如下:
[AAAPython基础教程, AAALinux入门教程]
程序中第 12 行调用了 removeIf() 方法批量删除集合中符合条件的元素,在该方法中传入一个 Lambda 表达式作为过滤条件,所有长度小于 12 的字符串元素都会被删除。通过上面的案例可以了解到 Predicate 的好处,除此之外,在使用 Predicate 时还可以充分简化集合的运算。以 List 集合为例,假设程序有如下 3 个统计需求:
- 在集合中统计出现“AAA”字符串的数量;
- 在集合中统计出现“Java”字符串的数量;
- 在集合中统计出现长度大于12的字符串的数量。
此处所做的也只是一个假设,在实际开发过程中还可能有更多的统计需求。如果还是采用传统的编程方式来完成这些需求,则需要执行 3 次循环,但是采用 Predicate 方式只需要调用一下方法即可,例如:
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
public class Demo {
public static void main(String[] args) {
List<String> books = new ArrayList<String>();
books.add("AAAJava基本教程");
books.add("C语言入门教程");
books.add("AAAC++基本教程");
books.add("AAAPython基础教程");
books.add("AAALinux入门教程");
books.add("AAAC#基础教程");
// 统计集合中出现 "AAA" 字符串的数量
System.out.println(count(books,
book -> ((String) book).contains("AAA")));
// 统计集合中出现 "Java" 字符串的数量
System.out.println(count(books,
book -> ((String) book).contains("Java")));
// 统计集合中出现长度大于12的字符串的数量
System.out.println(count(books,
book -> ((String) book).length() > 12));
}
public static int count(List<String> books, Predicate predicate) {
int total = 0;
for (String book : books) {
// 使用Predicate的test()方法判断该对象是否满足指定的条件
if (predicate.test(book)) {
total++;
}
}
return total;
}
}
程序的运行结果如下:
5
1
1
ICP备案:
公安联网备案: