jdk8부터 람다를 사용할 수 있습니다.
java.util.function 패키지에 여러 함수형 인터페이스들이 정의되어 있는데, 매개변수가 2개인 BiFunction, BiPredicate, BiConsumer 등 까지만 정의되어 있습니다.
@FunctionalInterface
interface TriFunction<T, U, V, R> {
R apply(T t, U u, V v);
}
@FunctionalInterface
interface TriPredicate<T, U, V> {
boolean test(T t, U u, V v);
}
@FunctionalInterface
interface TriConsumer<T, U, V> {
void accept(T t, U u, V v);
}
매개변수가 3개 이상인 함수형 인터페이스는 직접 만들면 됩니다. @FunctionalInterface 어노테이션 붙이는 걸 잊지 마세요.
가장 기본적인 함수형 인터페이스의 리턴타입과 동작 방식은 아래와 같습니다 (R은 리턴 타입입니다)
- Supplier<T>: T get()
매개변수 없고 반환값만 있음 - Consumer<T>: void accept(T t)
매개변수 있고 반환값 없음 - Function<T, R>: R apply(T t)
매개변수, 반환값 있음 - Predicate<T>: boolean test(T t)
매개변수 있고 반환값은 boolean
Function<Double, Function<Integer, Consumer<String>>> f = d -> i -> s -> {
System.out.println("" + d+ ";" + i+ ";" + s);
};
f.apply(1.0).apply(2).accept("s");
커링(currying)으로도 가능하다...라곤 하지만 그냥 함수형 인터페이스 쓰는게 여러모로 나아 보입니다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
snappy-java M1 mac 관련 이슈 해결방법 (0) | 2022.07.11 |
---|---|
[Jitpack] 소개 및 사용법 (배포, 의존성 추가) (0) | 2022.06.01 |
[Java] finally 블록 (0) | 2021.12.23 |
[Java] 오버로딩(Overloading) (0) | 2021.12.19 |
[Java] 배열(Array) (0) | 2021.12.18 |