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
- http://github.com/mwarycha/JavaLeader.pl/tree/master/java-8/src/main/java/pl/javaleader/biConsumer
- http://github.com/mwarycha/JavaLeader.pl/tree/master/java-8/src/main/java/pl/javaleader/biFunction
Leave a comment