MyMaxNumber.java
package lambda;
@FunctionalInterface //람다식을 위한 인터페이스임을 선언
public interface MyMaxNumber {
int getMaxNumber(int x, int y);
//함수형 인터페이스를 선언하게 되면 메서드를 두개이상 쓸수없음
//void add(int x, int y);
}
StringConcat.java
package lambda;
@FunctionalInterface
public interface StringConcat {
public void makeString(String s1,String s2);
}
StringConImpl.java
package lambda;
public class StringConImpl implements StringConcat{
@Override
public void makeString(String s1, String s2) {
System.out.println(s1+","+s2);
}
}
TestStringConcat.java
package lambda;
public class TestStringConcat {
public static void main(String[] args) {
StringConImpl impl=new StringConImpl();
impl.makeString("hello", "world");
StringConcat concat=(s,v)->System.out.println(s+","+v);
concat.makeString("hello","world");
//익명내부클래스
StringConcat concat2=new StringConcat() {
@Override
public void makeString(String s1, String s2) {
System.out.println(s1+","+s2);
}
};
concat2.makeString("hello", "world");
}
}
TestMyNumber.java
package lambda;
//람다식구현
public class TestMyNumber {
public static void main(String[] args) {
//x,y변수 중에 더 큰변수를 반환해주어라
//return이 있으면 중괄호를 생략할 수 없음
//return문이 하나인 경우에 중괄호와 return을 동시에 생략가능함
MyMaxNumber max=(x, y)->(x >= y)?x : y;
System.out.println(max.getMaxNumber(10, 20));
}
}
TestLambda.java
package lambda;
interface PrintString{
void showString(String str);
}
public class TestLambda {
public static void main(String[] args) {
PrintString lambdaStr=s->System.out.println(s);
lambdaStr.showString("Test");
showMyString(lambdaStr);
//함수의 구현부가 마치 변수처럼 반환되서 test변수에 대입해서 Test3!!!을 호출
PrintString test=returnString();
test.showString("Test3");
}
public static void showMyString(PrintString p) {
p.showString("Test2");
}
public static PrintString returnString(){
return s->System.out.println(s+"!!!");
}
}