Functional interfaces:
Interface | Method | Return type |
---|---|---|
Supplier<T> |
get() |
T |
Consumer<T> |
accept(T) |
void |
<BiConsumer<T, U> |
accept(T, U) |
T |
Predicate<T> |
test(T) |
boolean |
BiPreidcate<T, U> |
test(T, U) |
boolean |
Function<T, R> |
apply(T) |
R |
BiFunction<T, U, R> |
apply(T, U) |
R |
UnaryOperator<T> |
apply(T) |
T |
BinaryOperator<T> |
apply(T, T) |
T |
For setting development for Java 17, see https://stackoverflow.com/questions/70083274/java-17-java-invalid-source-release-7-with-enable-preview-preview-language/70083285#70083285
Use Supplier
package org.example;
import java.time.LocalDate;
import java.util.function.Supplier;
public class App {
public static void main(String[] args) {
Supplier<LocalDate> localDateSupplier = LocalDate::now;
Supplier<LocalDate> localDateSupplier1 = () -> LocalDate.now();
LocalDate localDate = localDateSupplier.get();
LocalDate localDate1 = localDateSupplier1.get();
System.out.print("localDate = ");
System.out.println(localDate);
System.out.print("localDate1 = ");
System.out.println(localDate1);
}
}
result
localDate = 2021-11-23
localDate1 = 2021-11-23
More complete object
ArrayList<String> stringArrayList = new ArrayList<>();
stringArrayList.add("Do Nhu Vy");
stringArrayList.add("Nguyen Bich Van");
stringArrayList.add("Nguyen Hong Do");
stringArrayList.add("Nguyen Tien Nam");
Supplier<ArrayList<String>> arrayListSupplier2 = () -> {
return stringArrayList;
};
ArrayList<String> strings2 = arrayListSupplier2.get();
System.out.print("strings2 = ");
System.out.println(strings2);
or other way
Supplier<ArrayList<String>> arrayListSupplier2 = () -> {
ArrayList<String> stringArrayList = new ArrayList<>();
stringArrayList.add("Do Nhu Vy");
stringArrayList.add("Nguyen Bich Van");
stringArrayList.add("Nguyen Hong Do");
stringArrayList.add("Nguyen Tien Nam");
return stringArrayList;
};
ArrayList<String> strings2 = arrayListSupplier2.get();
System.out.print("strings2 = ");
System.out.println(strings2);
result
strings = []
strings2 = [Do Nhu Vy, Nguyen Bich Van, Nguyen Hong Do, Nguyen Tien Nam]
How Java virtual machine manage object what is instance of Supplier
interface? Try an experiment:
System.out.print("arrayListSupplier2 = ");
System.out.println(arrayListSupplier2);
result
arrayListSupplier2 = org.example.App$$Lambda$19/[email protected]
Implicity way, this is the result of arrayListSupplier2.toString()
. Symbol $$
means object exist on memory only, not in hard disk. Exactly, arrayListSupplier2
initialized by a lambda expression as you seen in the below.
Implement Consumer
interface
package org.example;
import java.util.HashMap;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class SampleConsumer {
public static void main(String[] args) {
Consumer<String> stringConsumer = System.out::println;
Consumer<String> stringConsumer1 = vy -> System.out.println(vy);
stringConsumer.accept("Nguyen Bich Van");
stringConsumer1.accept("Tran Phuong Ly");
var map = new HashMap<String, Integer>();
BiConsumer<String, Integer> stringIntegerBiConsumer = map::put;
BiConsumer<String, Integer> stringIntegerBiConsumer1 = (ke, va) -> map.put(ke, va);
stringIntegerBiConsumer.accept("pigeon", 2);
stringIntegerBiConsumer1.accept("pig", 4);
System.out.print("map = ");
System.out.println(map);
}
}
Result
Nguyen Bich Van
Tran Phuong Ly
map = {pigeon=2, pig=4}