java.util.function.Supplier
это функциональный интерфейс Согласно определению функциональных интерфейсов, у него есть один абстрактный функциональный метод T get()
.
Определение Javadoc
Функциональный интерфейс: это функциональный интерфейс, и поэтому его можно использовать в качестве цели назначения для лямбда-выражения или ссылки на метод. Экземпляры функциональных интерфейсов могут быть созданы с помощью лямбда-выражений, ссылок на методы или ссылок на конструкторы.
Подпись интерфейса Поставщика, как показано ниже, представляет поставщика результатов.
@FunctionalInterface
public interface Supplier
Здесь T — это тип результатов, предоставленных этим поставщиком.
Определение метода согласно Javadoc
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;
}
}
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());
}
}
Существуют примитивные специализации интерфейса поставщика:
IntSupplier
имея один абстрактный методgetAsInt()
LongSupplier
имея один абстрактный методgetAsLong()
DoubleSupplier
имея один абстрактный методgetAsDouble()
BooleanSupplier
имея один абстрактный методgetAsBoolean()
Потребительский интерфейс
java.util.function.Consumer
это функциональный интерфейс Как и у поставщика, у него есть один абстрактный функциональный методaccept(T t)
и метод по умолчанию andThen(Consumer<? super T>
after)
Примечание . Методы по умолчанию не являются абстрактными.
Подпись интерфейса Consumer, как показано ниже, представляет операцию, которая принимает один входной аргумент и не возвращает результата.
@FunctionalInterface
public interface Consumer
Здесь T — тип ввода для операции.
Определение метода согласно Javadoc
void accept(T t)
: Этот абстрактный метод принимает один аргумент и выполняет эту операцию над данным аргументом. Это не возвращает никакого значения.
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);
};
}
Возвращает составного получателя, который последовательно выполняет эту операцию, после которой следует операция после. Если при выполнении какой-либо операции возникает исключение, оно передается вызывающей стороне составленной операции. Если выполнение этой операции вызывает исключение, операция после не будет выполнена.
Давайте посмотрим на пример:
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 - ");
}
}
Опять же, как и у поставщика, вот несколько примитивных специализаций интерфейса 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)
‘
Счастливого обучения!