Фильтр Java Stream

JavaJavaBeginner

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Java Streams предоставляют нам способ обрабатывать данные эффективно и кратко. Метод filter() Streams позволяет нам фильтровать элементы из заданного потока на основе условия или предиката. В этом лабе мы узнаем, как использовать метод filter() и фильтровать элементы из потока в Java.

Создать поток целых чисел

Создадим поток целых чисел и отфильтруем из него четные числа. Мы объявим список целых чисел, преобразуем его в поток и затем используем метод 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(), а затем отфильтровываем строки, содержащие букву 'l', с использованием метода 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<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(), а затем отфильтровываем объекты, возраст которых больше 30, с использованием метода filter().

Резюме

В этом лабе мы узнали, как использовать метод filter() Java Streams для фильтрации элементов на основе условия или предиката. Мы работали с фильтрацией потоков целых чисел, строк и пользовательских объектов с использованием метода filter().