-
FunctionalStaticPL/JAVA 2019. 8. 27. 20:46
1. Overview
The term Java functional interface was introduced in Java 8. A functional interface in Java is an interface that contains only a single abstract (unimplemented) method. A functional interface can contain default and static methods which do have an implementation, in addition to the single unimplemented method.
1.1 Without Implementation
public interface MyFunctionalInterface { public void execute(); }
1.2 With Implementation
public interface MyFunctionalInterface2{ public void execute(); public default void print(String text) { System.out.println(text); } public static void print(String text, PrintWriter writer) throws IOException { writer.write(text); } }
2. Relationship with Lambda
A Java functional interface can be implemented by a Java Lambda Expression. A Java lambda expression implements a single method from a Java interface. In order to know what method the lambda expression implements, the interface can only contain a single unimplemented method. In other words, the interface must be a Java functional interface.
MyFunctionalInterface lambda = () -> { System.out.println("Executing..."); }
3. Built-in Functional Interfaces
3.1 Function (java.util.function.Function)
The Java Function interface (java.util.function.Function) interface is one of the most central functional interfaces in Java. The Function interface represents a function (method) that takes a single parameter and returns a single value. Here is how the Function interface definition looks:
public interface Function<T,R> { public <R> apply(T parameter); }
The only method you have to implement to implement the Function interface is the apply() method. Here is a Function implementation example:
3.1.1 Declaration
public class AddThree implements Function<Long, Long> { @Override public Long apply(Long aLong) { return aLong + 3; } }
3.1.2 Usage
Function<Long, Long> adder = new AddThree(); Long result = adder.apply((long) 4); System.out.println("result = " + result);
3.1.3 Lambda case
Function<Long, Long> adder = (value) -> value + 3; Long resultLambda = adder.apply((long) 8); System.out.println("resultLambda = " + resultLambda);
3.2 Predicate (java.util.function.Predicate)
The Java Predicate interface represents a simple function that takes a single value as a parameter, and returns true or false.
public interface Predicate { boolean test(T t); }
public class CheckForNull implements Predicate { @Override public boolean test(Object o) { return o != null; } }
Predicate predicate = (value) -> value != null;
3.3 UnaryOperator
The Java UnaryOperator interface is a functional interface that represents an operation that takes a single parameter and returns a parameter of the same type.
UnaryOperator<Person> unaryOperator = (person) -> { person.name = "New Name"; return person; };
3.4 BinaryOperator
The Java BinaryOperator interface is a functional interface that represents an operation that takes two parameters and returns a single value. Both parameters and the return type must be of the same type.
BinaryOperator<MyValue> binaryOperator = (value1, value2) -> { value1.add(value2); return value1; };
3.5 Supplier
The Java Supplier interface is a functional interface that represents a function that supplies a value of some sort. The Supplier interface can also be thought of as a factory interface. Here is an example implementation of the Java Supplier interface:
Supplier<Integer> supplier = () -> new Integer((int) (Math.random() * 1000D));
3.6 Consumer
The Java Consumer interface is a functional interface that represents a function that consumes a value without returning any value. A Java Consumer implementation could be printing out the value or writing it to a file, or over the network, etc. Here is an example implementation of the Java Consumer interface:
// This Java Consumer implementation prints the value // passed as parameter to it out to System.out. Consumer<Integer> consumer = (value) -> System.out.println(value);
4. Reference
http://tutorials.jenkov.com/java-functional-programming/functional-interfaces.html
'StaticPL > JAVA' 카테고리의 다른 글
Is-A and Has-A Relationship in Java (0) 2020.02.05 Boxing, unboxing, and autoboxing (0) 2019.09.27 Generics and Generic Methods (0) 2019.08.27 Reflection (0) 2019.08.27 Checked and Unchecked Exceptions (0) 2019.08.23