람다 표현식의 기본 개념을 실제로 적용한 몇 가지 간단한 예:
예 1 - 람다 없는 구현과 람다 있는 구현 비교
람다 사용 안 함:
MyValueSemLambda1 인터페이스 {
더블 getValue(); // 추상 메서드
}
MyValueImpl 클래스는 MyValueSemLambda1을 구현합니다{
비공개 이중 값;
// value
속성을 초기화하는 생성자
public MyValueImpl(이중 값) {
this.value = 값;
}
// getValue 메소드 구현
@오버라이드
공개 더블 getValue() {
이 값을 반환합니다.
}
}
공개 클래스 MyValueSemLambda {
public static void main(String[] args) {
MyValueSemLambda1 myVal = new MyValueImpl(98.6); // 속성에 값 할당
System.out.println("값: " myVal.getValue()); // 98.6을 인쇄합니다
}
}
람다 사용:
MyValueCompare 인터페이스 {
더블 getValue();
}
공개 클래스 MyValueComparacao {
public static void main(String[] args) {
// 속성이 없지만 값을 반환하는 람다 표현식
MyValueCompares myVal = () -> 98.6;
System.out.println("값: " myVal.getValue()); // 98.6을 인쇄합니다
}
}
예 2 - LambdaDemo
// 기능적인 인터페이스.
인터페이스 MyValue {
더블 getValue();
}
// 또 다른 기능적 인터페이스.
인터페이스 MyParamValue {
double getValue(double v);
}
클래스 LambdaDemo {
공개 정적 무효 메인(문자열 인수[])
{
MyValue myVal; // 인터페이스 참조 선언
// 여기서 람다 표현식은 단순히 상수 표현식입니다.
// myVal에 할당되면 인스턴스
가 생성됩니다.
// 람다 표현식이
을 구현하는 클래스
// MyValue.
의 getValue() 메서드
myVal = () -> 98.6; 간단한 람다 표현식
//
에서 제공하는 getValue()를 호출합니다.
// 이전에 할당된 람다 표현식.
System.out.println("상수 값: " myVal.getValue());
// 이제 매개변수화된 람다 표현식을 생성하고 할당합니다
// MyParamValue 참조용입니다. 이 람다 표현식은
을 반환합니다.
// 인수의 역수입니다.
MyParamValue myPval = (n) -> 1.0/n; 람다 표현식
매개변수가 있는
// myPval 참조를 통해 getValue()를 호출합니다.
System.out.println("4의 역수는 " myPval.getValue(4.0));
System.out.println("8의 역수는 " myPval.getValue(8.0));
// 람다 표현식은 정의된 메서드와 호환되어야 합니다
// 기능적 인터페이스를 통해. 따라서 다음 지침은 작동하지 않습니다.
// myVal = () -> "삼"; // 오류! 문자열은 double과 호환되지 않습니다!
// myPval = () -> 수학.랜덤(); // 오류! 매개변수는 필수입니다!
}
}
출력:
상수 값: 98.6
4의 역수는 0.25
8의 역수는 0.125
호환되지 않는 예:
예상 반환 유형이 double인 경우 문자열 값을 사용할 수 없습니다.
매개변수가 필요한 메소드는 매개변수를 제공하지 않으면 사용할 수 없습니다.
기능적 인터페이스는 호환되는 모든 람다 표현식과 함께 사용할 수 있습니다.
예 3 - 숫자 테스트
가분성 테스트: 첫 번째 숫자가 두 번째 숫자로 나누어지는지 확인합니다.
크기 비교: 첫 번째 숫자가 두 번째 숫자보다 작은지 확인합니다.
절대값 비교: 두 숫자의 절대값이 같으면 true를 반환합니다.
// int와
두 매개변수를 취하는 기능적 인터페이스
// 부울 결과를 반환합니다.
인터페이스 NumericTest {
부울 테스트(int n, int m);
}
클래스 LambdaDemo2 {
공개 정적 무효 메인(문자열 인수[])
{
// 이 람다 표현식은 숫자
// 다른 요소입니다.
NumericTest isFactor = (n, d) -> (n % d) == 0;
if(isFactor.test(10, 2))
System.out.println("2는 10의 인수입니다.");
if(!isFactor.test(10, 3))
System.out.println("3은 10의 인수가 아닙니다.");
System.out.println();
// 이 람다 표현식은
// 첫 번째 인수가 두 번째 인수보다 작습니다.
NumericTest lessThan = (n, m) -> (n
if(lessThan.test(2, 10))
System.out.println("2는 10보다 작습니다.");
if(!lessThan.test(10, 2))
System.out.println("10은 2보다 작지 않습니다.");
System.out.println();
// 이 람다 표현식은
// 인수의 절대값이 동일합니다.
NumericTest absEqual = (n, m) -> (n
if(absEqual.test(4, -4))
System.out.println("4와 -4의 절대값은 같습니다.");
if(!lessThan.test(4, -5))
System.out.println("4와 -5의 절대값은 동일하지 않습니다.");
System.out.println();
}
}
출력:
2는 10의 인수입니다
3은 10의 약수가 아닙니다
2는 10보다 작습니다
10은 2보다 작지 않습니다
4와 -4의 절대값은 같습니다.
4와 -5의 절대값은 같지 않습니다.
호환되는 람다 표현식은 동일한 기능적 인터페이스와 함께 사용할 수 있습니다.
동일한 참조 변수를 다른 람다 표현식에 재사용할 수 있습니다.
변수를 재사용하면 읽기가 더 쉬워지고 코드 리소스가 절약됩니다.
이 예에서는 동일한 인터페이스가 다양한 구현에 사용되었습니다.
NumericTest myTest;
myTest = (n, d) -> (n % d) == 0; //구현 1
if(myTest.test(10, 2))
System.out.println("2는 10의 인수입니다.");
// ...
myTest = (n, m) -> (n
if(myTest.test(2, 10))
System.out.println("2는 10보다 작습니다.");
//...
myTest = (n, m) -> (n
if(myTest.test(4, -4))
System.out.println("4와 -4의 절대값은 같습니다.");
// ...
참조변수의 명확성
다양한 참조 변수(예: isFactor, lessThan, absEqual)를 사용하면 각 변수가 어떤 람다 표현식을 나타내는지 명확하게 식별하는 데 도움이 됩니다.
다중 매개변수 지정
람다 표현식의 여러 매개변수는 람다 연산자 왼쪽에 있는 괄호 목록에서 쉼표로 구분됩니다.
예: (n, d) -> (n % d) == 0.
람다 표현식에서 다양한 유형 사용
기능적 인터페이스의 추상 메소드에는 매개변수 유형이나 반환값에 제한이 없습니다.
문자열과 같은 비원시 데이터 유형을 람다 표현식에 사용할 수 있습니다.
문자열을 사용한 테스트 예
기능적 인터페이스를 사용하면 한 문자열이 다른 문자열에 포함되어 있는지 확인하는 등 특정 문자열 관련 조건을 테스트할 수 있습니다.
// 두 문자열을 테스트하는 기능적 인터페이스
인터페이스 StringTest {
부울 테스트(String aStr, String bStr);
}
클래스 LambdaDemo3 {
공개 정적 무효 메인(문자열 인수[])
{
// 이 람다 표현식은 문자열이 일치하는지 여부를 결정합니다
// 다른 부분.
StringTest isIn = (a, b) -> a.indexOf(b) != -1;
String str = "테스트입니다";
System.out.println("테스트 문자열: " str);
if(isIn.test(str, "is a"))
System.out.println("'은'을(를) 찾았습니다.");
그 외
System.out.println("'a'를 찾을 수 없습니다.");
if(isIn.test(str, "xyz"))
System.out.println("'xyz' 발견");
그 외
System.out.println("'xyz'를 찾을 수 없습니다.");
}
}
출력:
테스트 문자열: 테스트입니다
'is a'가 발견되었습니다.
'xyz'를 찾을 수 없습니다
StringTest 기능 인터페이스
부울 값을 반환하는 추상 메서드 test(String aStr, String bStr)를 정의합니다.
람다 표현식으로 구현
람다식 (a, b) -> a.indexOf(b) != -1은 문자열(b)가 다른 문자열(a)에 포함되어 있는지 확인합니다.
매개변수의 유형 추론
매개변수 a와 b는 String 유형으로 추론되므로 indexOf와 같은 String 클래스의 메서드를 사용할 수 있습니다.
프로그램은 "This is a test" 문자열을 테스트하여 "is a" 및 "xyz" 하위 문자열이 포함되어 있는지 확인하고 그에 따라 결과를 인쇄합니다.
위 내용은 실제 람다 표현식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!