Skip to content

Dashboard

Function programming in Java 17

Created by Admin

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}
Source: https://viblo.asia/p/function-programming-in-java-17-3Q75wvxBlWb