您的位置:

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

一、基本概念

list.stream().filter是Java 8中常用来处理集合的方法之一,其作用是过滤出满足特定条件的元素,返回一个满足条件的新集合。该方法基于Stream流实现,可以使用Lambda表达式或者方法引用作为条件判断,返回的集合可以是任意类型,例如List、Set等。

二、应用场景

1、过滤出满足某一条件的元素

List<String> strings = Arrays.asList("Java", "Python", "C#", "PHP", "JavaScript");
List<String> result = strings.stream()
        .filter(str -> str.length() <= 4)
        .collect(Collectors.toList());

上述代码中,我们使用了filter来过滤出字符串长度小于等于4的元素,返回一个新的List。

2、多条件组合筛选

List<Person> people = Arrays.asList(
        new Person("Alice", 25),
        new Person("Bob", 30),
        new Person("Charlie", 35),
        new Person("David", 40)
);
List<Person> result = people.stream()
        .filter(p -> p.getName().startsWith("A") && p.getAge() >= 25)
        .collect(Collectors.toList());

上述代码中,我们使用filter同时筛选出名字以字母"A"开头并且年龄大于等于25岁的人,返回一个新的List。

3、类型转换

List<String> strings = Arrays.asList("1", "2", "3");
List<Integer> result = strings.stream()
        .map(Integer::valueOf)
        .filter(i -> i <= 2)
        .collect(Collectors.toList());

上述代码中,我们先将字符串转换成整型,再使用filter方法过滤出值小于等于2的元素,最后返回一个新的List。

三、代码示例

下面是一个完整的示例代码:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        //示例1:过滤出满足某一条件的元素
        List<String> strings = Arrays.asList("Java", "Python", "C#", "PHP", "JavaScript");
        List<String> result1 = strings.stream()
                .filter(str -> str.length() <= 4)
                .collect(Collectors.toList());
        System.out.println(result1); //[Java, C#, PHP]

        //示例2:多条件组合筛选
        List<Person> people = Arrays.asList(
                new Person("Alice", 25),
                new Person("Bob", 30),
                new Person("Charlie", 35),
                new Person("David", 40)
        );
        List<Person> result2 = people.stream()
                .filter(p -> p.getName().startsWith("A") && p.getAge() >= 25)
                .collect(Collectors.toList());
        System.out.println(result2); //[Person{name='Alice', age=25}]

        //示例3:类型转换
        List<String> strings2 = Arrays.asList("1", "2", "3");
        List<Integer> result3 = strings2.stream()
                .map(Integer::valueOf)
                .filter(i -> i <= 2)
                .collect(Collectors.toList());
        System.out.println(result3); //[1, 2]
    }
}

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}