![](http://static.coupangcdn.com/image/affiliate/category/20180610/coupang-640-x-100.jpg)
BiFunction과 TriFunction
Java 8에 BiFunction 이라는 것이 추가되었습니다.
private BiFunction<Integer, String, String> createStatusErrorMessage = (code, status) -> {
StringBuilder sb = new StringBuilder();
//do something.
return sb.toString();
};
기본적인 생김새는 위와 같습니다.
앞의 두개의 타입으로 파라미터를 받고 3번째 타입으로 return 하겠다는 의미입니다.
TriFunction도 있을 거라고 생각을 했는데 없어서 따로 만들어야 합니다.
@FunctionalInterface
public interface TriFunction<A, B, C, R> {
R apply(A a, B b, C c);
default <V> TriFunction<A, B, C, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (A a, B b, C c) -> after.apply(apply(a, b, c));
}
}
위와 같이 FunctionalInterface annotation을 넣은 TriFunction interface를 만듭니다.
생김새는 BiFunction과 거의 같습니다.
private TriFunction<String, String, String, String> createStatusErrorMessage = (paymentStatus, pgStatus, pgType) -> {
StringBuilder statusErrorBuilder = new StringBuilder();
//do something.
return statusErrorBuilder.toString();
};
BiFunction과 TriFunction의 사용방법도 같습니다.
예를 들어 Parameter를 분류하여 ErrorMessage 를 생성하는 용도로 사용한다고 하겠습니다.
private static Map<String, TriFunction<String, String, String, String>> errorBuilderMap = new HashMap<>();
public ErrorMessageBuilder() {
errorBuilderMap.put("STATUS", createStatusErrorMessage);
}
public String build() {
return errorBuilderMap.get(errorMessageBuilder.errorType)
.apply(errorMessageBuilder.data1, errorMessageBuilder.data2, errorMessageBuilder.data3);
}
위와 같이 Map<String, TriFunction> 에 Key로 사용할 에러 메세지 타이틀과 에러 메세지를 만들 TriFunction을 넣습니다.
그리고 파라미터를 입력받아 TriFunction을 get하여 TriFunction.apply(parameter1, parameter2, parameter3) 하면 해당 TriFunction이 호출되어 실행되고 값을 리턴합니다.
'Programming > Java' 카테고리의 다른 글
List 에 add() 했을때 UnsupportedOperationException 나는 경우 (0) | 2019.07.12 |
---|---|
Spring Boot를 run 할 때 멈추는 경우 (0) | 2019.01.29 |
[직관적인 클린 코드를 위해] IF - ELSE IF 문 줄이기 2 (2) | 2018.06.01 |
[직관적인 클린 코드를 위해] IF - ELSE IF 문 줄이기 (0) | 2018.05.30 |