functional programming - class-based functional

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangbingfengf98/article/details/86557748
// functional/ClassFunctionals.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.

import java.util.*;
import java.util.function.*;

class AA {}

class BB {}

class CC {}

public class ClassFunctionals {
  static AA f1() {
    return new AA();
  }

  static int f2(AA aa1, AA aa2) {
    return 1;
  }

  static void f3(AA aa) {}

  static void f4(AA aa, BB bb) {}

  static CC f5(AA aa) {
    return new CC();
  }

  static CC f6(AA aa, BB bb) {
    return new CC();
  }

  static boolean f7(AA aa) {
    return true;
  }

  static boolean f8(AA aa, BB bb) {
    return true;
  }

  static AA f9(AA aa) {
    return new AA();
  }

  static AA f10(AA aa1, AA aa2) {
    return new AA();
  }

  public static void main(String[] args) {
    Supplier<AA> s = ClassFunctionals::f1;
    System.out.println(s.get());
    Comparator<AA> c = ClassFunctionals::f2;
    System.out.println(c);
    System.out.println(c.compare(new AA(), new AA()));
    Consumer<AA> cons = ClassFunctionals::f3;
    cons.accept(new AA());
    BiConsumer<AA, BB> bicons = ClassFunctionals::f4;
    bicons.accept(new AA(), new BB());
    Function<AA, CC> f = ClassFunctionals::f5;
    CC cc = f.apply(new AA());
    BiFunction<AA, BB, CC> bif = ClassFunctionals::f6;
    cc = bif.apply(new AA(), new BB());
    Predicate<AA> p = ClassFunctionals::f7;
    boolean result = p.test(new AA());
    BiPredicate<AA, BB> bip = ClassFunctionals::f8;
    result = bip.test(new AA(), new BB());
    UnaryOperator<AA> uo = ClassFunctionals::f9;
    AA aa = uo.apply(new AA());
    BinaryOperator<AA> bo = ClassFunctionals::f10;
    aa = bo.apply(new AA(), new AA());
  }
}

/* My Output:
AA@87aac27
ClassFunctionals$$Lambda$2/1406718218@e9e54c2
1
*/

As we just saw, once the method reference is assigned to a functional interface, we can call the functional method associated with that interface.

references:

1. On Java 8 - Bruce Eckel

2. http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/function/Supplier.java

3. https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#compare-T-T-

4. https://github.com/wangbingfeng/OnJava8-Examples/blob/master/functional/ClassFunctionals.java

5. http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/function/BiFunction.java

6. http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/function/BiConsumer.java

7. http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/function/BiPredicate.java

8. http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/function/Predicate.java

9. http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/function/BinaryOperator.java

10. http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/util/function/UnaryOperator.java

猜你喜欢

转载自blog.csdn.net/wangbingfengf98/article/details/86557748