Java 8 – BiConsumer & BiFunction & BinaryOperator


Java 8 – BiConsumer & BiFunction & BinaryOperator

BiConsumer to interfejs funkcyjny z jedną metodą accept przyjmującą dwa parametry oraz zwracającą typ void oraz z jedną domyślną metodą – andThen która pozwala wykonywać operacje na powiązanych ze sobą obiektach typu BiConsumer:

BiConsumer<Integer, Integer> addition = (x, y) -> {
	System.out.println(x + y);
};

BiConsumer<Integer, Integer> subtraction = (x, y) -> {
	System.out.println(x - y);
};

addition.andThen(subtraction).accept(2, 2);

Wynik:

4
0

BiFunction to interfejs funkcyjny z jedną metodą apply przyjmującą dwa parametry oraz zwracającą określony parametrycznie typ oraz z jedną domyślną  metodą – andThen która pozwala wykonywać operacje na powiązanych ze sobą obiektach typu Function:

BiFunction<Integer, Integer, Integer> addition = (x, y) -> {
    return x + y;
};

Function<Integer, Integer> subtraction1 = x -> x - 10;
Function<Integer, Integer> subtraction2 = x -> x - 10;

System.out.println(addition.andThen(subtraction1).apply(2,2));
System.out.println(addition.andThen(subtraction1).andThen(subtraction2).apply(2,2));

Wynik:

-6
-16

BinaryOperator to interfejs który działa na jednym i tym samym typie który posiada metodę apply oraz andThen (tak jak w przypadku interfejsu BiFunction – interfejs BinaryOperator rozszerza interfejs BiFunction). Dodatkowo interfejs ten posiada dwie metody minBy() oraz maxBy() które jako argument przyjmują obiekty klas implementujących interfejs Comparator().

public class BinaryOperatorDemo {

    static class MyCustomCOmparatorMin implements Comparator<Integer> {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o1-o2;
        }
    }

    static class MyCustomCOmparatorMax implements Comparator<Integer> {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2-o1;
        }
    }

    public static void main(String[] args) {

        BinaryOperator<Integer> addition = (x,y) -> x + y;
        System.out.println( addition.apply(2,2));


        BinaryOperator<Integer> biByMin = BinaryOperator.minBy(new MyCustomCOmparatorMin());
        System.out.println(biByMin.apply(5, 7));

        BinaryOperator<Integer> biByMax = BinaryOperator.minBy(new MyCustomCOmparatorMax());
        System.out.println(biByMax.apply(5, 7));

    }

}

Wynik:

4
5
7

Kod źródłowy do wglądu na GitHub!

Jeśli chcesz uzyskać dostęp do GitHuba na 30 dni i pobrać kod źródłowy wyślij smsa o treśći DOSTEP.EDUSESSION na numer 7943. Tyle wiedzy a koszt to tylko 9 PLN (11.07 PLN z VAT).




 


Leave a comment

Your email address will not be published.


*