Рубрики
Без рубрики

Использование потокового API Java

Интерфейс, представленный в Java 8, способствовал декларативному программированию на Java. Декларативная программа… Помеченный как java, поток, java 8, лямбда.

Интерфейс, представленный в Java 8, способствовал декларативному программированию на Java. Декларативное программирование – это стиль программирования, который описывает то, что вы хотите, вместо того, чтобы указывать компилятору, как это сделать, что является императивным программированием. Поток – это последовательность элементов, поддерживающих последовательные и параллельные агрегатные операции. Другими словами, это позволяет нам определить последовательность операций для обработки последовательности элементов.

Конвейер потока начинается с источника, который может быть массивом, коллекцией, каналом ввода-вывода и т. Д. К этому источнику подключено от нуля до нескольких промежуточных операций и, наконец, терминальная операция, которая дает результат. Потоки являются ленивыми, и вычисления выполняются только после запуска операции терминала.

Ниже я продемонстрирую некоторые функциональные возможности, которые предлагает API Java Stream.

Объект, который мы будем использовать для демонстрации функциональности:

public class Pet {

    private final String name;
    private final int age;
    private final Type type;

    public Pet(String name, int age, Type type) {
        super();
        this.name = name;
        this.age = age;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public Type getType() {
        return type;
    }

    @Override
    public String toString() {
        return "Pet [name=" + name + ", age=" + age + "]";
}
    }

Наряду с перечислением, используемым для описания типа домашнего животного:

public enum Type {
    DOG, CAT
}

Теперь перейдем к демонстрации:

public class Demo {


    public static void main(String[] args) {
        List petAnimals = getPets();

        // find all dogs
        System.out.println("Find All Dogs");
        List dogs = petAnimals.stream()
                .filter(animal -> animal.getType().equals(Type.DOG))
                .collect(Collectors.toList());
        dogs.forEach(System.out::println);

        // sort by age
        System.out.println("\nSort By Age");
        List ages = petAnimals.stream()
                .sorted(Comparator.comparing(Pet::getAge))
                .collect(Collectors.toList());
        ages.forEach(System.out::println);

        // average age of cats
        System.out.println("\nAverage Age of Cats");
        Double avgCatAge = petAnimals.stream()
                .filter(animal -> animal.getType().equals(Type.CAT))
                .collect(Collectors.averagingInt(Pet::getAge));
        System.out.println(avgCatAge);

        // average age of all pets
        System.out.println("\nAverage Age of Pets");
        Double avgPetAge = petAnimals.stream()
                .collect(Collectors.averagingInt(Pet::getAge));
        System.out.println(avgPetAge);

        // name of youngest dog
        System.out.println("\nName of Youngest Dog");
        petAnimals.stream()
            .filter(animal -> animal.getType().equals(Type.DOG))
            .min(Comparator.comparing(Pet::getAge))
            .map(animal -> animal.getName())
            .ifPresent(System.out::println);

        // number of cats
        System.out.println("\nNumber of Cats");
        long numOfCats = petAnimals.stream()
            .filter(animal -> animal.getType().equals(Type.CAT))
            .count();
        System.out.println(numOfCats);


    }

    private static List getPets(){
        return Arrays.asList(
            new Pet("Marley", 5, Type.DOG),
            new Pet("Beethoven", 2, Type.CAT),
            new Pet("Ernest", 4, Type.DOG),
            new Pet("Tabby", 7, Type.CAT),
            new Pet("Snowball", 1, Type.CAT),
            new Pet("Lassie", 3, Type.DOG),
            new Pet("Little Nicky", 6, Type.CAT),
            new Pet("Copper", 12, Type.DOG)
        );
    }
}
// find all dogs
        System.out.println("Find All Dogs");
        List dogs = petAnimals.stream()
                .filter(animal -> animal.getType().equals(Type.DOG))
                .collect(Collectors.toList());
        dogs.forEach(System.out::println);
  1. Превратите коллекцию в поток
  2. Отфильтруйте объекты на основе типа в другой поток
  3. возвращает только объекты, соответствующие предыдущему предикату
// sort by age
        System.out.println("\nSort By Age");
        List ages = petAnimals.stream()
                .sorted(Comparator.comparing(Pet::getAge))
                .collect(Collectors.toList());
        ages.forEach(System.out::println);
  1. Превратите коллекцию в поток
  2. Сортировка потока объектов в порядке возрастания в зависимости от возраста
  3. возвращает только объекты, соответствующие предыдущему предикату
// average age of cats
        System.out.println("\nAverage Age of Cats");
        Double avgCatAge = petAnimals.stream()
                .filter(animal -> animal.getType().equals(Type.CAT))
                .collect(Collectors.averagingInt(Pet::getAge));
        System.out.println(avgCatAge);
  1. Превратите коллекцию в поток
  2. Отфильтруйте объекты на основе типа в другой поток
  3. уменьшите поток до объектов, соответствующих среднему значению данной функции
// average age of all pets
        System.out.println("\nAverage Age of Pets");
        Double avgPetAge = petAnimals.stream()
                .collect(Collectors.averagingInt(Pet::getAge));
        System.out.println(avgPetAge);
  1. Превратите коллекцию в поток
  2. уменьшите поток до объектов, соответствующих среднему значению данной функции
// name of youngest dog
        System.out.println("\nName of Youngest Dog");
        petAnimals.stream()
            .filter(animal -> animal.getType().equals(Type.DOG))
            .min(Comparator.comparing(Pet::getAge))
            .map(animal -> animal.getName())
            .ifPresent(System.out::println);
  1. Превратите коллекцию в поток
  2. Отфильтруйте объекты на основе типа в другой поток
  3. возвращает минимальный элемент потока
  4. перейдите по элементу и верните имя
// number of cats
        System.out.println("\nNumber of Cats");
        long numOfCats = petAnimals.stream()
            .filter(animal -> animal.getType().equals(Type.CAT))
            .count();
        System.out.println(numOfCats);
  1. Превратите коллекцию в поток
  2. Отфильтруйте объекты на основе типа в другой поток
  3. возвращает количество элементов в потоке

Оригинал: “https://dev.to/brittcodes/using-java-s-stream-api-hmj”