ex) 매개변수가 Function<Integer,String> 이고 리턴값이 String인 HOF
Function<Function<Integer,String>,String>
ex) 매개변수가 String 이고 리턴값이 Function<Integer,String>인 HOF
Function<Integer,Function<Integer,String>>
final Function<Function<Integer,String>,String> function1 = g -> g.apply(10);
//매개변수로 받은 Function을 실행 시키는데 그Function의 매개변수로 10을 넣는다.
String result = function1.apply(i -> String.valueOf("값은 ? " + i));
/**
* function1에 매개변수로 주어질 Lambda Expressions
* i에는 10이 들어가고 그값을 String으로 바꿔줌
* */
System.out.println("result = " + result);
//실행결과 : 값은 ? 10
final Function<Integer,Function<Integer,String>> function2 =
g -> g2 -> String.valueOf("첫번째 : "+g +"/ 두번째 : "+g2);
/**
* g -> Integer value인 매개변수
* g2 -> String.valueOf("첫번째 : "+g +"/ 두번째 : "+g2);
* 이부분은 리턴될 Lambda Expressions 이다.
* */
String result2 = function2.apply(10).apply(20);
/**
* f2.apply(10)는 결국 g2->String.valueOf("첫번째 : "+10 +"/ 두번째 : "+g2);
* 이라는 Lambda Expressions가 된다.
* 여기선 그럼 위의 Lambda 을 한번더 실행하기 때문에 최종적으로 String value가 리턴된다.
* */
System.out.println("result2 = " + result2);
private <T,R> List<R> map(final List<T> list, final Function<T,R> mapper) {
final List<R> result= new ArrayList<>();
for (final T t : list) {
result.add(mapper.apply(t));
}
return result;
}
ex) 각 매개변수의 값들을 String 형태로 이어붙이기
final Function<Integer,Function<Integer,Function<Integer,String>>> f = i -> i2 -> i3 -> "값 : "+i+i2+i3;
String result3 = f.apply(1).apply(2).apply(3);
System.out.println("result3 = " + result3);
//결과 : result3 = 값 : 123