Java 8中list.stream().filter方法的应用

Java 8中list.stream().filter方法的应用

Java 8中list.stream().filter方法的应用

1. 介绍

Java 8中,新增了一种操作集合的方式——Stream流。Stream是一个用于描述元素序列的抽象概念,它可以让我们以一种声明式的方式对集合进行操作,提供了更加灵活和简洁的代码实现方式。

Stream提供了很多操作方法,其中一个常用的方法是filter。这个方法可以根据指定的条件对流中的元素进行筛选,只返回满足条件的元素。

本文将详细介绍Java 8中list.stream().filter方法的使用方式和示例代码。

2. filter方法的定义

filter方法是Stream接口中的一个默认方法,其定义如下:

Stream<T> filter(Predicate<? super T> predicate)

从定义可以看出,filter方法的参数是一个Predicate接口的实例,用于指定筛选条件。该方法返回一个新的Stream对象,其中包含满足条件的元素。

3. 使用示例

下面我们通过实际代码示例来演示list.stream().filter方法的应用。

假设我们有一个保存学生信息的集合List,其中Student类定义如下:

public class Student {
    private String name;
    private int age;
    // 其他属性和方法省略
}

现在我们要从这个集合中筛选出年龄大于等于18岁的学生。

首先,我们可以使用传统的方式遍历集合并筛选出满足条件的元素:

List<Student> students = new ArrayList<>();
// 添加一些学生信息...

List<Student> filteredStudents = new ArrayList<>();
for (Student student : students) {
    if (student.getAge() >= 18) {
        filteredStudents.add(student);
    }
}

使用Stream流,我们可以用更加简洁的方式来实现同样的功能:

List<Student> filteredStudents = students.stream()
                                         .filter(student -> student.getAge() >= 18)
                                         .collect(Collectors.toList());

以上代码中,我们首先通过调用stream方法将List转化为Stream对象。然后,通过链式调用filter方法,传入一个Lambda表达式作为筛选条件,筛选出年龄大于等于18岁的学生。最后,通过collect方法将筛选结果保存为一个新的List对象。

需要注意的是,filter方法的参数是一个返回值为boolean类型的函数式接口,用于对元素进行判断。在以上示例中,我们使用Lambda表达式student -> student.getAge() >= 18作为筛选条件。

4. filter方法的应用场景

filter方法在实际开发中有很多应用场景。下面列举几个常见的例子。

4.1 筛选出满足某个条件的元素

我们可以使用filter方法来筛选出满足某个条件的元素,比如筛选出年龄大于等于18岁的学生、筛选出工资高于平均工资的员工等。

示例代码:

List<Student> filteredStudents = students.stream()
                                         .filter(student -> student.getAge() >= 18)
                                         .collect(Collectors.toList());

4.2 过滤出不重复的元素

在某些场景下,我们可能需要对集合中的元素进行去重操作。filter方法可以很方便地帮助我们实现这个功能。

示例代码:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 4, 5, 6, 6, 7, 8, 9, 9, 10);
List<Integer> distinctNumbers = numbers.stream()
                                       .distinct()
                                       .collect(Collectors.toList());

以上代码中,我们通过distinct方法筛选出不重复的元素。最终,distinctNumbers列表中将只包含不重复的数字。

4.3 排除满足某个条件的元素

除了筛选出满足某个条件的元素外,有时我们也需要排除满足某个条件的元素。这时可以使用filter方法配合逻辑非(!)来实现。

示例代码:

List<Student> filteredStudents = students.stream()
                                         .filter(student -> !(student.getAge() < 18))
                                         .collect(Collectors.toList());

以上代码中,我们使用!(student.getAge() < 18)作为筛选条件,排除年龄小于18岁的学生。

5. 总结

本文介绍了Java 8中list.stream().filter方法的使用方式和示例代码。通过使用这个方法,我们可以以一种简洁、灵活的方式对集合中的元素进行筛选和过滤操作。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程