Статьи

Взгляд на интерфейсы поставщиков и потребителей Java 8

java.util.function.Supplier это функциональный интерфейс Согласно определению функциональных интерфейсов, у него есть один абстрактный функциональный метод T get().

Editing: “Supplier and Consumer Interface in Java8”

Определение Javadoc

Функциональный интерфейс: это функциональный интерфейс, и поэтому его можно использовать в качестве цели назначения для лямбда-выражения или ссылки на метод. Экземпляры функциональных интерфейсов могут быть созданы с помощью лямбда-выражений, ссылок на методы или ссылок на конструкторы.

Подпись интерфейса Поставщика, как показано ниже, представляет поставщика результатов.

Editing: “Supplier and Consumer Interface in Java8”

@FunctionalInterface

public interface Supplier

Editing: “Supplier and Consumer Interface in Java8”

Здесь T — это тип результатов, предоставленных этим поставщиком.

Editing: “Supplier and Consumer Interface in Java8”

Определение метода согласно Javadoc

Editing: “Supplier and Consumer Interface in Java8”

T get(): Этот абстрактный метод не принимает никаких аргументов, но вместо этого возвращает вновь созданные значения T в потоке. Но не требуется, чтобы новые или отличные результаты возвращались при каждом вызове поставщика.

Теперь давайте посмотрим на пример.

Person.java

package com.test.java8;

public class Person {
    private String name;
    private int age;
    private String address;

    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setDesignation(String address) {
        this.address = address;
    }
}

Editing: “Supplier and Consumer Interface in Java8”

Person.java — это класс bean-компонентов, который мы будем использовать для предоставления данных с использованием поставщика в классе TestSupplier ниже.

TestSupplier.java

package com.test.java8;
import java.util.function.Supplier;

public class TestSupplier {
    public static void main(String[] args) {
        Supplier < Person > supplier = () - > {
            return new Person("Varun", 30, "Programmer");
        };
        Person p = supplier.get();
        System.out.println("Person Detail:\n" + p.getName() + ", " + p.getAge() + ", " + p.getAddress());
    }
}

Editing: “Supplier and Consumer Interface in Java8”

Существуют примитивные специализации интерфейса поставщика:

  • IntSupplier имея один абстрактный метод getAsInt()
  • LongSupplier имея один абстрактный метод getAsLong()
  • DoubleSupplier имея один абстрактный метод getAsDouble()
  • BooleanSupplier имея один абстрактный метод getAsBoolean()

Editing: “Supplier and Consumer Interface in Java8”

Потребительский интерфейс

java.util.function.Consumer это функциональный интерфейс Как и у поставщика, у него есть один абстрактный функциональный методaccept(T t)и метод по умолчанию andThen(Consumer<? super T>
after)

Editing: “Supplier and Consumer Interface in Java8”

Примечание . Методы по умолчанию не являются абстрактными.

Editing: “Supplier and Consumer Interface in Java8”

Подпись интерфейса Consumer, как показано ниже, представляет операцию, которая принимает один входной аргумент и не возвращает результата.

@FunctionalInterface

public interface Consumer

Здесь T — тип ввода для операции.

Editing: “Supplier and Consumer Interface in Java8”

Определение метода согласно Javadoc

void accept(T t): Этот абстрактный метод принимает один аргумент и выполняет эту операцию над данным аргументом. Это не возвращает никакого значения.

Editing: “Supplier and Consumer Interface in Java8”
Editing: “Supplier and Consumer Interface in Java8”

default Consumer<T> andThen(Consumer<? super T>
after)
:

default Consumer < T > andThen(Consumer << ? super T > after) {
    Objects.requireNonNull(after);
    return (T t) - > {
        accept(t);after.accept(t);
    };
}

Editing: “Supplier and Consumer Interface in Java8”

Возвращает составного получателя, который последовательно выполняет эту операцию, после которой следует операция после. Если при выполнении какой-либо операции возникает исключение, оно передается вызывающей стороне составленной операции. Если выполнение этой операции вызывает исключение, операция после не будет выполнена.

Editing: “Supplier and Consumer Interface in Java8”

Давайте посмотрим на пример:

package com.test.java8;
import java.util.function.Consumer;

public class TestConsumer {
    public static void main(String[] args) {
        Consumer < String > consumer1 = (arg) - > {
            System.out.println(arg + "OK");
        };
        consumer1.accept("TestConsumerAccept - ");
        Consumer < String > consumer2 = (x) - > {
            System.out.println(x + "OK!!!");
        };
        consumer1.andThen(consumer2).accept("TestConsumerAfterThen - ");
    }
}

Editing: “Supplier and Consumer Interface in Java8”

Опять же, как и у поставщика, вот несколько примитивных специализаций интерфейса Consumer:

  • IntConsumer имея один абстрактный метод » accept(int)и один метод по умолчанию default IntConsumer andThen(IntConsumer after)
  • DoubleConsumer имея один абстрактный метод » accept(double)и один метод по умолчанию default DoubleConsumer andThen(DoubleConsumer after)
  • LongConsumer имея один абстрактный метод » accept(long)и один метод по умолчанию default LongConsumer andThen(LongConsumer after)

Счастливого обучения!