람다 표현식: lambda-expression
Java8 부터 도입:
(매개변수 리스트) -> 리턴값
(매개변수 리스트) -> {...} 수행코드
추상메소드가 하나인 인터페이스 구현, 즉 익명클래스 사용 더 간략화한 표현식
package com.lec.java.lambda01;
/* 람다 표현식: lambda-expression
Java8 부터 도입:
(매개변수 리스트) -> 리턴값
(매개변수 리스트) -> {...} 수행코드
추상메소드가 하나인 인터페이스 구현, 즉 익명클래스사용 더 간략화한 표현식
*/
public class Lambda01Main {
public static void main(String[] args) {
System.out.println("인터페이스, 익명 클래스, 람다 표현식");
System.out.println();
System.out.println("[1] 인터페이스를 구현하는 클래스");
Addable myAdder = new AdderImple();
double result = myAdder.add(1.11, 2.22);
System.out.println("result = " + result);
System.out.println();
System.out.println("[2] 익명 클래스 사용");
Addable myAdder2 = new Addable() {
@Override
public double add(double x, double y) {
return x + y;
}
};
result = myAdder2.add(1.11, 2.22);
System.out.println("result = " + result);
System.out.println();
System.out.println("[3] 람다 표현식(lambda expression) 사용");
Addable myAdder3 = (a, b) -> a + b;
result = myAdder3.add(1.11, 2.22);
System.out.println("result = " + result);
System.out.println("\n프로그램 종료");
} // end main()
} // end class
//인터페이스 정의
interface Addable {
public abstract double add(double x, double y);
}
//인터페이스를 구현하는 클래스를 정의
class AdderImple implements Addable {
@Override
public double add(double x, double y) {
return x + y;
}
}
람다 표현식 (lambda - expression):
() -> 수행코드
() -> 리턴값
(매개변수..) -> 수행코드
(매개변수..) -> 리턴값
매개변수의 타입은 생략해서 표현이 가능
매개변수가 여러개 있을 경우,
모든 매개변수의 타입을 생략해서 표현하거나,
모든 매개변수의 타입을 모두 다 표현해야 함.
public class Lambda02Main {
public static void main(String[] args) {
System.out.println("익명 클래스, 람다 표현식 연습");
// 매개변수 없고, 리턴값도 없는 경우
Test01 lambda01 = () -> System.out.println("안녕하세요");
lambda01.testPrint();
// 매개변수 한개, 리턴값은 없는 경우
Test02 lambda02 = (x) -> System.out.println("num = " + x);
lambda02.testPrint(55);
// 매개변수 여러개, 리턴값이 있슴.
Test03 lambda03 = (x, y) -> (x > y) ? x : y;
System.out.println("result = " + lambda03.max(10, 20));
// 매개변수 한개, 내부 수행코드 여러줄.., 리턴값.
Test04 lambda04 = (x) -> {
System.out.println(x);
return x.length();
};
int result = lambda04.myStrLen("Java");
System.out.println("result = " + result);
// Test05 인터페이스 만들기
// void printMax(double x, double y)
Test05 lambda05 = (x, y) -> {
System.out.println("x = " + x);
System.out.println("y = " + y);
if(x > y) {
System.out.println(x + " > " + y);
} else {
System.out.println(x + " <= " + y);
}
};
// [실행]
// .printMax(3.14, 1.2)
lambda05.printMax(3.14, 1.2);
// [출력양식 예제]
// x = 3.14
// y = 1.2
// 3.14 > 1.2
// TODO
System.out.println("\n프로그램 종료");
} // end main()
} // end class
'JAVA' 카테고리의 다른 글
[JAVA] 파일 입출력 (0) | 2022.02.22 |
---|---|
[JAVA] 쓰레드 (0) | 2022.02.18 |
[JAVA] 내부 클래스 (0) | 2022.02.17 |
[JAVA] Collection (0) | 2022.02.17 |
[JAVA] Wrapper 클래스 (0) | 2022.02.17 |