sort로 예시를 들어보자면
public void sortByAnonymous() {
Arrays.sort(langs, new Comparator<String>{
@Override
public int compare(String o1,o2){
return o1.compareTo(o2);
}
});
}
이렇게 익명클래스로 구현하던 comparator를 람다로 간결하게 표현
public void sortByLambda() {
Arrays.sort(langs, new Comparator<String>{
(o1,o2) -> {
return o2.compareTo(o1);
});
}
문법을 몇가지 간단하게 정리해보자
@FunctionalInterface : 컴파일러가 하나의 abstract method만 있음을 체크한다. 두개의 메소드 존재시 오류가 발생! abstract가 2개이상 존재할경우 여전히 익명의 innerClass를 사용한다.
@FunctionalInterface
interface Lambda {
void lamb();
}
public class Test{
public static void main(String[] args){
Lambda l1 = () -> System.out.println("실행");
l1.lamb();
}
}
@FunctionalInterface
interface Lambda {
void lamb(String str);
}
public class Test{
public static void main(String[] args){
Lambda l1 = (str) -> System.out.println(str);
Lambda l2 = System.out::println; //이중콜론문법도 ㄱㄴ
l1.lamb("실행");
}
}
@FunctionalInterface
interface Lambda {
String lamb();
}
public class Test{
public static void main(String[] args){
Lambda l1 = () -> {
return "data";
}
l1.lamb();
}
}
@FunctionalInterface
interface Lambda {
String lamb(Stirng str);
}
public class Test{
public static void main(String[] args){
Lambda l1 = (o1) -> {
return o1+"data";
}
l1.lamb("go ");
}
}