자바
자바에서 제공하는 함수형 인터페이스
devjones
2021. 4. 5. 15:06
docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html
java.util.function (Java Platform SE 8 )
Interface Summary Interface Description BiConsumer Represents an operation that accepts two input arguments and returns no result. BiFunction Represents a function that accepts two arguments and produces a result. BinaryOperator Represents an operation u
docs.oracle.com
자바에서 기본적으로 제공해주는 함수형 인터페이스 몇몇 있다. (위 링크 참고)
하나씩 살펴보자.
1. Function<R, T>
다음은 T타입을 받아서 R타입을 리턴하는 함수 인터페이스이다.
package main03;
import java.util.function.Function;
public class Plus10 implements Function<Integer, Integer> {
@Override
public Integer apply(Integer t) {
return t + 10;
}
}
package main03;
public class Main {
public static void main(String[] args) {
Plus10 p10 = new Plus10();
System.out.println(p10.apply(1));// 11
}
}
Plus10 클래스 없이 람다표현식을 이용할 수 있다.
package main03;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> p10 = (number) -> number + 10;
// (number) -> {
// return number + 10;
// }
System.out.println(p10.apply(1));
}
}
함수 조합용 메소드
* compose
package main03;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> p10 = (number) -> number + 10;
Function<Integer, Integer> multiply2 = (number) -> number * 2;
// p10.compose(multiply2); // .compose 메소드는 파라미터를 먼저 적용하고 그 결과를 p10의 파라미터로 사용한다.
Function<Integer, Integer> multiply2AndPlus10 = p10.compose(multiply2);
System.out.println(multiply2AndPlus10.apply(1)); // 12
}
}
* andThen
package main03;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> p10 = (number) -> number + 10;
Function<Integer, Integer> multiply2 = (number) -> number * 2;
// p10.andThen(multiply2); // .andThen 메소드는 먼저 p10, 그다음에 multiply2
System.out.println(p10.andThen(multiply2).apply(1)); // 22
}
}
2. BiFunction<T, U, R>
두 개의 값(T, U)을 받아서 R 타입을 리턴하는 함수 인터페이스
3. Consumer<T>
T 타입을 받아서 아무값도 리턴하지 않는 함수 인터페이스
package main03;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Consumer<Integer> printT = (i) -> System.out.println(i);
printT.accept(10); // 10
}
}
4. Supplier<T>
T 타입의 값을 제공하는 함수 인터페이스
package main03;
import java.util.function.Consumer;
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
Supplier<Integer> get10 = () -> 10;
System.out.println(get10.get()); // 10
}
}
5. Predicate<T>
T 타입을 받아서 boolean 을 리턴하는 함수 인터페이스
package main03;
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<String> startsWithDevjones = (s) -> s.startsWith("devjones");
Predicate<Integer> isEven = (i) -> i % 2 == 0;
System.out.println(startsWithDevjones.test("devjones 파이팅!")); // true
System.out.println(isEven.test(9)); // false
}
}