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

 


Leave a comment

Your email address will not be published.


*