Java Stream Filter

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

Java Streams 为我们提供了一种高效且简洁的数据处理方式。Streams 的 filter() 方法允许我们根据条件或谓词从给定的流中过滤元素。在本实验中,我们将学习如何使用 filter() 方法并从 Java 流中过滤元素。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("`Java`")) -.-> java/DataStructuresGroup(["`Data Structures`"]) java(("`Java`")) -.-> java/ProgrammingTechniquesGroup(["`Programming Techniques`"]) java(("`Java`")) -.-> java/FileandIOManagementGroup(["`File and I/O Management`"]) java/DataStructuresGroup -.-> java/collections_methods("`Collections Methods`") java/ProgrammingTechniquesGroup -.-> java/lambda("`Lambda`") java/FileandIOManagementGroup -.-> java/stream("`Stream`") subgraph Lab Skills java/collections_methods -.-> lab-117954{{"`Java Stream Filter`"}} java/lambda -.-> lab-117954{{"`Java Stream Filter`"}} java/stream -.-> lab-117954{{"`Java Stream Filter`"}} end

创建一个整数流

让我们创建一个整数流,并从中过滤出偶数。我们将声明一个整数列表,将其转换为流,然后使用 filter() 方法过滤出偶数。

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

public class StreamFilter {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Stream<Integer> stream = numbers.stream();

        Stream<Integer> evenNumbers = stream.filter(i -> i % 2 == 0);

        List<Integer> result = evenNumbers.collect(Collectors.toList());

        System.out.println(result); // Output: [2, 4, 6, 8, 10]
    }
}

在上面的代码中,我们声明了一个整数列表,使用 stream() 方法将其转换为流,然后使用 filter() 方法过滤出偶数。

创建一个字符串流

让我们创建一个字符串流,并从中过滤出包含特定字母的字符串。我们将声明一个字符串列表,将其转换为流,然后使用 filter() 方法过滤出包含特定字母的字符串。

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

public class StreamFilter {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("hello", "world", "java", "stream", "filter");
        Stream<String> stream = words.stream();

        char letter = 'l';

        Stream<String> filteredWords = stream.filter(s -> s.indexOf(letter) != -1);

        List<String> result = filteredWords.collect(Collectors.toList());

        System.out.println(result); // Output: [hello, world, filter]
    }
}

在上面的代码中,我们声明了一个字符串列表,使用 stream() 方法将其转换为流,然后使用 filter() 方法过滤出包含字母 'l' 的字符串。

创建一个自定义对象流

让我们创建一个自定义对象流,并根据条件过滤出符合条件的对象。我们将声明一个自定义对象列表,将其转换为流,然后使用 filter() 方法根据条件过滤出对象。

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

public class StreamFilter {
    public static void main(String[] args) {
        List<Person> people = Arrays.asList(
                new Person("John", 25),
                new Person("Sarah", 30),
                new Person("Mike", 35),
                new Person("Emma", 40)
        );

        Stream<Person> stream = people.stream();

        Stream<Person> filteredPeople = stream.filter(p -> p.getAge() > 30);

        List<Person> result = filteredPeople.collect(Collectors.toList());

        System.out.println(result); // Output: [Mike{name='Mike', age=35}, Emma{name='Emma', age=40}]
    }
}

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 name + "{name='" + name + '\'' + ", age=" + age + '}';
    }
}

在上面的代码中,我们声明了一个 Person 类型的自定义对象列表,使用 stream() 方法将其转换为流,然后使用 filter() 方法过滤出年龄大于 30 的对象。

总结

在本实验中,我们学习了如何使用 Java Streams 的 filter() 方法根据条件或谓词过滤元素。我们通过 filter() 方法对整数流、字符串流以及自定义对象流进行了过滤操作。

您可能感兴趣的其他 Java 教程