> Java > java지도 시간 > 실제 람다 표현식

실제 람다 표현식

Patricia Arquette
풀어 주다: 2025-01-07 08:12:40
원래의
691명이 탐색했습니다.

As expressões lambda em ação

람다 표현식의 기본 개념을 실제로 적용한 몇 가지 간단한 예:

예 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를 반환합니다.

  • main()에서는 람다 표현식을 사용하여 세 가지 다른 테스트가 생성됩니다.

// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿