Java8 Lamda
인자 -> { 바디 }
인자
- 인자가 없으면 (),
- 인자가 있으면 (foo, foo2...)
- 인자는 컴파일러가 추론 가능
바디
화살표 오른쪽에 사용
내용이 한줄이면 {} 생략가능
함수형 인터페이스
1. Function<T,R>
T타입을 받아 R타입 리턴
기본 사용
- apply
조합을 위해 사용할때는
- andThen
- compose
apply
1
2
3
4
5
6
7
8
9
10
11
|
public class App {
public static void main( String[] args) {
Function<Integer, Integer> plus = (i) -> i + 2;
System.out.println(plus.apply(10)); // 12
}
}
|
cs |
andThen
1
2
3
4
5
6
7
|
public static void main( String[] args) {
Function<Integer, Integer> plus = (i) -> i + 2;
Function<Integer, Integer> multiply = (i) -> i * 2;
System.out.println(plus.andThen(multiply).apply(10));
}
|
cs |
(10 + 2 )* 2 = 24
compose
1
2
3
4
5
6
7
|
public static void main( String[] args) {
Function<Integer, Integer> plus = (i) -> i + 2;
Function<Integer, Integer> multiply = (i) -> i * 2;
System.out.println(plus.compose(multiply).apply(10));
}
|
cs |
(10 * 2) + 2 = 22
파라미터와 리턴의 값이 같으면 UnarayOperator로 치환할 수 있다.
1
2
3
4
5
6
7
8
|
public static void main( String[] args) {
UnaryOperator<Integer> plus = (i) -> i + 2;
UnaryOperator<Integer> multiply = (i) -> i * 2;
System.out.println(plus.compose(multiply).apply(10));
}
|
cs |
람다의 스코프
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public static void main( String[] args) {
showResult(); // 10
}
private static void showResult() {
final int local = 1;
IntConsumer result = (i) -> {
System.out.println(i + local);
};
result.accept(9);
}
|
cs |
람다식에서 로컬 변수를 참조할 수 있다.
하지만 final로 값이 변하지 않는 값이어야한다.
final을 생략할 수 있는 경우는 effectively final (사실상 final 인 변수)인 경우이다.
'JAVA' 카테고리의 다른 글
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 (0) | 2020.11.17 |
---|---|
Interface default methods (0) | 2020.10.19 |
Garbage Collection (0) | 2020.09.04 |
Java Heap (0) | 2020.09.04 |
JVM (0) | 2020.08.14 |