Lambda
메서드를 하나의 표현식(expression)으로 표기한 것
자바는 타 프로그래밍 언어와 같이 함수형 프로그래밍 방식이 적용되지 않으므로
함수만 독립적으로 정의하여 사용하기 위해 만든 방식
람다식 문법
int add(int x, int y){
return x+y;
}
//위의 코드를 람다식으로 표현
() -> {} 으로 구현
(int x, int y) -> {return x+y;}
//자료형 생략, 중괄호 생략 (return으로 반환할 경우 return도 같이 생략 가능)
(x, y) -> x+y;
람다식용 인터페이스
package ex2_lamda;
@FunctionalInterface //이 인터페이스를 람다식용으로 사용한다는 뜻
public interface MyFunction {
//람다식용 인터페이스에 추상메서드는 반드시 하나여야 함
void method(int num);
}
이중콜론
package ex2_lamda;
public class Calculator3 {
public static void main(String[] args) {
MyFunction mf = System.out::println;
//::(이중콜론) : 메서드 참조 연산자
//람다식을 더 간결하게 사용할 수 있도록 해줌
//클래스명::함수명
mf.method(30);
}
}
람다식을 파라미터로 활용
package ex2_lamda;
public interface MyCaculator {
int plus(int num1, int num2);
}
package ex2_lamda;
public class Calculator4 {
public static void main(String[] args) {
//람다식을 매개변수로 사용하기
// MyCaculator calc = (num1,num2)->num1+num2;
// System.out.println(myCalc(calc));
System.out.println(myCalc((num1,num2)->num1+num2));
}
public static int myCalc(MyCaculator calc) {
return calc.plus(1, 2);
}
}
람다식을 활용해 List 요소 출력하기
package ex2_lamda;
import java.util.ArrayList;
public class Calculator5 {
public static void main(String[] args) {
//collection framework와 함수형 인터페이스
//컬렉션 프레임워크엔 여러개의 인터페이스가 존재하며 그 중 일부는 함수형 인터페이스를 채택하고 있다.
ArrayList<String> list = new ArrayList<>();
list.add("이름1");
list.add("이름2");
list.add("이름3");
list.add("이름4");
list.add("이름5");
list.forEach(System.out::println);
}
}