람다식 : 메서드를 하나의 식으로 표현한 것 또는 '익명함수'
List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
Collections.sort(list1, new Comparator<String>(){
@Override
public int compare(String s1, String s2) {
return s2.compareTo(s1);
}
});
List<String> list = Arrays.asList("abc", "aaa", "bbb", "ddd", "aaa");
Collections.sort(list2, (s1, s2) -> s2.compareTo(s1));
static MyFunction2 getMyFunction() { // 반환 타입이 MyFunction2인 메서드
MyFunction2 f = () -> System.out.println("f3.run()");
return f; // 또는 return System.out.println("f3.run()"); 사용 가능
MyFunction f = (MyFunction)( () -> {} );
MyFunction f = ( () -> {} );
Object obj = (Object)(MyFunction) (() -> {});
@FunctionalInterface
interface MyFunction {
void myMethod();
}
class Outer {
int val = 10; // Outer.this.val
class Inner {
int val = 20; // this.val
void method(int i) { // void method(final int i)
int val = 30; // final int val = 30;
// i = 10; // 에러. 상수의 값을 변경할 수 없음.
MyFunction f = () -> {
System.out.println("i = " + i);
System.out.println("val = " + val);
System.out.println("this.val = " + this.val);
System.out.println("Outer.this.val = " + Outer.this.val);
};
f.myMethod();
}
} // Inner 클래스의 끝
} // Outer 클래스의 끝
class LamdaEx3 {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.method(100);
}
}
[결과]
i = 100
val = 30
this.val = 20
Outer.this.val = 10
[출처 : 저자 남궁성의 Java의 정석 3rd Edition]