[Lambda 람다]
import java.util.Random;
@FunctionalInterface
interface Printable {
public abstract void print(String s);
}
/*
* class Printer implements Printable{
*
* @Override public void print(String s) -> { System.out.println(s); } }
*/
//람다 : -> 파라미터 와 함수 본체 사이
//자바에서의 람다는 기본적으로 인터레이스 구현
//람다 구현을 위한 인터페이스는 기본적으로 반시 추상함수가 한개이여야함.
//람다를 위한 인터페이스란 의미의 @FunctionalInterface 을 제공
// 1)매개변수가 있고 반환하지 않는 람다식
// 2)매개변수가 두개인 람다식
@FunctionalInterface
interface Calculate {
void cal(int a, int b); // 매개변수 둘, 반환형 void
}
///매개변수가 있고 반환하는 람다식1
@FunctionalInterface
interface Calculate2 {
int cal(int a, int b); // 매개변수 둘, 반환형 void
}
@FunctionalInterface
interface HowLong {
int len(String s); // 값을 반환하는 메소드 | 매개변수가 있고 반환하는 람다식2
}
@FunctionalInterface
interface Generator {
int rand(); // 매개변수가 없는 메소드
}
//함수에 람다함수 전달
//@FunctionalInterface
//interface HowLong {
// int len(String s); // 값을 반환하는 메소드 | 매개변수가 있고 반환하는 람다식2
//}
//람다식과 제네릭
interface Calculate3<T> {
T cal(T a, T b); // 제네릭 기반의 함수형 인터페이스
}
public class LambdaExample {
public static void getHowLong(HowLong howLong, String s) {
System.out.println(howLong.len(s));
}
public static void main(String args[]) {
Calculate3<Integer> ci = (a, b) -> a + b;// <T> 제네릭에 Integer가 들어감
System.out.println(ci.cal(10, 20)); // 30 출력
ci = (a, b) -> a * b;
System.out.println(ci.cal(10, 20)); // 200 출력
getHowLong(s -> s.length(), "안녕하세요.안녕하세요"); // 함수에 람다함수 전달 | 문자길이 출력
Generator gen = () -> {
Random rand = new Random();
return rand.nextInt(50); // 0~49까지 랜덤 숫자 출력
};
System.out.println(gen.rand());
HowLong how = s -> s.length();
System.out.println(how.len("안녕하세요ㄴㅇㅀ")); // 8 출력
Calculate2 cal2;
cal2 = (a, b) -> {
return a + b;
}; // return문의 중괄호는 생략 불가!
System.out.println(cal2.cal(3, 4)); // 7 출력
cal2 = (a, b) -> a + b; //
System.out.println(cal2.cal(3, 4)); // 7 출력
Calculate cal;
cal = (a, b) -> System.out.println(a + b);
cal.cal(4, 3); // 7 출력
cal = (a, b) -> System.out.println(a - b);
cal.cal(4, 3); // 1 출력
cal = (a, b) -> System.out.println(a * b);
cal.cal(4, 3); // 12 출력
Printable prn = (String s) -> {
System.out.println(s);
};
prn.print("메롱 ~~~");
prn = (s) -> {
System.out.println(s);
};
prn.print("메롱 ~~~");
prn = s -> {
System.out.println(s);
};
prn.print("메롱 ~~~");
prn = s -> System.out.println(s);
prn.print("메롱 ~~~");
System.out.println("난 기억나지롷 메롱...");
}
}