A functional interface is an interface that has only one abstract method and is used as an assignment destination for lambda expressions and method references. I tried to summarize the standard functional interface
As a standard functional interface, typical method types are defined in the java.util.function package.
| interface | Method | Description | 
|---|---|---|
| Function <T, R> | R apply (T t) | Takes a T-type argument and returns an R-type result | 
| Consumer <T> | void accept (T t) | Receives T-type arguments and returns no results | 
| Predicate <T> | boolean test(T t) | Takes a T-type argument and returns the result of a boolean value | 
| Supplier <T> | T get() | Returns a T-type result with no arguments | 
Sample.java
        // Function<T, R>
        //Example: Returns the string length of the argument
        Function<String, Integer> function = String::length;
        System.out.println(function.apply("12345")); // 5
        // Consumer<T>
        //Example: Output the argument string length
        Consumer<String> consumer = str -> System.out.println(str.length());
        consumer.accept("12345"); // 5
        // Predicate<T>
        //Example: In the argument string"foo"Judgment whether is included
        Predicate<String> predicate = str -> Objects.nonNull(str) && str.contains("foo");
        System.out.println(predicate.test("foo bar")); // true
        // Supplier<T>
        //Example:"Sample"return it
        Supplier<String> supplier = () -> "Sample";
        System.out.println(supplier.get()); // Sample
You can combine standard functional interfaces to create new functional interfaces
Synthesize using compose, ʻandThen (The difference between compose and ʻandThen is the order of composition)
Predicate system can be synthesized using ʻand, ʻor, negate
Sample.java
        //Function composition of Function
        Function<String, Integer> function1 = String::length;
        Function<Integer, Integer> function2 = i -> i * 100;
        //When using compose
        Function<String, Integer> newFunction1 = function2.compose(function1);
        //When using andThen
        Function<String, Integer> newFunction2 = function1.andThen(function2);
        System.out.println(newFunction1.apply("12345")); // 500
        System.out.println(newFunction2.apply("12345")); // 500
        //Predicate function composition
        Predicate<Integer> predicate1 = i -> i % 2 == 0; //Judging whether it is an even number
        Predicate<Integer> predicate2 = i -> i >= 100; //Judgment whether it is 100 or more
        //Determine if it is even and 100 or more
        Predicate<Integer> newPredicate1 = predicate1.and(predicate2);
        //Determine if it is odd and less than 100(negate()Is a logical negation)
        Predicate<Integer> newPredicate2 = predicate1.negate().and(predicate2.negate());
        System.out.println(newPredicate1.test(100)); // true
        System.out.println(newPredicate2.test(99)); // true
        Recommended Posts