인프런의 더자바, JAVA8 강의를 들으며 정리한 내용입니다.
//A_FunctionalInterface.java
public interface A_FunctionalInterface {
void doIt(); // abstract
}
//Main.java
A_FunctionalInterface functionalInterface = () -> {
System.out.println("hello");
};
functionalInterface.doIt(); //hello
T 타입을 받아서 R 타입을 리턴. R apply(T t). andThen, compose
Function<Integer,Integer> plus10 = (i) -> i+10;
Function<Integer,Integer> multiply2 = (i) -> i*2;
//compose 는 괄호 안 부터 실행 : multiply2 -> plus10
System.out.println(plus10.compose(multiply2).apply(1)); //1*2+10 = 12
//andThen 는 괄호를 나중에 실행 : plus10 -> multiply2
System.out.println(plus10.andThen(multiply2).apply(1)); //(1+10)*2 = 22
두 개의 값(T, U)를 받아서 R 타입을 리턴. R apply(T t, U u)
BiFunction<Integer,Integer,Integer> multiply = (i,j) -> i*j;
System.out.println(multiply.apply(10,5)); // 50
T 타입을 받아서 아무값도 리턴하지 않는 함수. void Accept(T t). andThen
Consumer<Integer> printT = System.out::println;
// (i) -> System.out.println(i);
printT.accept(10); // 10
T 타입의 값을 제공. T get()
Supplier<Integer> ten = () -> 10;
System.out.println(ten.get()); //10
T 타입을 받아서 boolean을 리턴. boolean test(T t). And, Or, Negate
Predicate<String> startsWithAhri = (s) -> s.startsWith("ahri");
System.out.println(startsWithAhri.test("ahriNara")); //true