Java의 람다 표현식

Java의 람다 표현식

Java에서 람다 표현식은 기본적으로 기능적 인터페이스의 인스턴스를 표현합니다(단일 추상 메서드가 있는 인터페이스를 기능적 인터페이스라고 합니다). Java의 람다 표현식은 입력을 매개변수로 받아들이고 결과 값을 반환하는 짧은 코드 블록인 람다 함수와 동일합니다. 람다 표현식은 최근 Java SE 8에 포함되었습니다.

Java의 람다 표현식 기능

람다 표현식은 유일한 추상 함수를 구현하므로 기능 인터페이스를 구현합니다. 람다 표현식은 Java 8에 추가되었으며 아래 기능을 제공합니다.

  • 기능을 메서드 인수로 처리하거나 코드를 데이터로 처리할 수 있습니다.
  • 어떤 클래스에도 속하지 않고 생성될 수 있는 함수입니다.
  • 람다 표현식은 객체인 것처럼 전달되고 요청 시 실행될 수 있습니다.

Java 람다 표현식 예

자바
// Java program to demonstrate lambda expressions // to implement a user defined functional interface. // A sample functional interface (An interface with // single abstract method interface FuncInterface {  // An abstract function  void abstractFun(int x);  // A non-abstract (or default) function  default void normalFun()  {  System.out.println('Hello');  } } class Test {  public static void main(String args[])  {  // lambda expression to implement above  // functional interface. This interface  // by default implements abstractFun()  FuncInterface fobj = (int x)->System.out.println(2*x);  // 위의 람다 표현식을 호출하고 10을 인쇄합니다. fobj.abstractFun(5);  } } 

산출
10 

람다 식 람다 표현식 구문

 lambda operator ->본체 

람다 표현식 매개변수

아래에는 세 가지 람다 표현식 매개변수가 언급되어 있습니다.

  1. 제로 매개변수
  2. 단일 매개변수
  3. 다중 매개변수

1. 매개변수가 0인 람다 표현식

() ->System.out.println('매개변수 0 람다'); 

2. 단일 매개변수를 사용한 람다 표현식

(p) ->System.out.println('하나의 매개변수: ' + p); 

해당 변수의 유형이 컨텍스트에서 추론될 수 있는 경우 괄호를 사용하는 것이 필수는 아닙니다.

자바
// A Java program to demonstrate simple lambda expressions import java.util.ArrayList; class Test {  public static void main(String args[])  {  // Creating an ArrayList with elements  // {1, 2, 3, 4}  ArrayList arrL = 새로운 ArrayList ();  arrL.add(1);  arrL.add(2);  arrL.add(3);  arrL.add(4);  // 람다 식을 사용하여 // arrL의 모든 요소를 ​​인쇄합니다. arrL.forEach(n -> System.out.println(n));  // 람다 표현식을 사용하여 // arrL의 짝수 요소를 인쇄합니다. arrL.forEach(n -> { if (n % 2 == 0) System.out.println(n); });  } } 

산출
1 2 3 4 2 4 

메모: 람다 식은 기능적 인터페이스를 구현하는 데에만 사용할 수 있습니다. 위의 예에서도 람다 표현식은 다음을 구현합니다. 소비자 기능적 인터페이스.

3. 여러 매개변수를 사용한 람다 표현식

(p1, p2) ->System.out.println('다중 매개변수: ' + p1 + ', ' + p2); 

두 개의 인수를 사용하여 람다 식의 작동을 보여주는 Java 프로그램입니다.

자바
// Java program to demonstrate working of lambda expressions public class Test {  // operation is implemented using lambda expressions  interface FuncInter1 {  int operation(int a, int b);  }  // sayMessage() is implemented using lambda expressions  // above  interface FuncInter2 {  void sayMessage(String message);  }  // Performs FuncInter1's operation on 'a' and 'b'  private int operate(int a, int b, FuncInter1 fobj)  {  return fobj.operation(a, b);  }  public static void main(String args[])  {  // lambda expression for addition for two parameters  // data type for x and y is optional.  // This expression implements 'FuncInter1' interface  FuncInter1 add = (int x, int y) ->x + y;  // 두 매개변수에 대한 람다 식 곱셈 // 이 식은 // 'FuncInter1' 인터페이스도 구현합니다. FuncInter1 Multiply = (int x, int y) -> x * y;  // 람다를 사용하여 // 다양한 구현을 사용하여 호출할 테스트 객체 생성 // 표현식 테스트 tobj = new Test();  // 람다 식을 사용하여 두 숫자 더하기 System.out.println('Addition is ' + tobj.operate(6, 3, add));  // 람다 식을 사용하여 두 숫자를 곱합니다. System.out.println('곱셈은 ' + tobj.operate(6, 3, 곱하기));  // 단일 매개변수에 대한 람다 표현식 // 이 표현식은 'FuncInter2' 인터페이스를 구현합니다. FuncInter2 fobj = message -> System.out.println('Hello ' + message);  fobj.sayMessage('Geek');  } } 

산출
Addition is 9 Multiplication is 18 Hello Geek 

메모: 람다 표현식은 함수와 동일하며 함수와 마찬가지로 매개변수를 허용합니다.

결론

이 기사에서 섭취한 몇 가지 중요한 사항은 다음과 같습니다.

  • 람다 식의 본문에는 0개, 1개 또는 그 이상의 문이 포함될 수 있습니다.
  • 단일 명령문이 있는 경우 중괄호는 필수가 아니며 익명 함수의 반환 유형은 본문 표현식의 반환 유형과 동일합니다.
  • 명령문이 두 개 이상인 경우 중괄호(코드 블록)로 묶어야 하며 익명 함수의 반환 유형은 코드 블록 내에서 반환된 값의 유형과 동일하거나 아무것도 반환되지 않으면 void입니다. .

람다 표현식 FAQ

Q1. Java의 람다 표현식 유형은 무엇입니까?

답변:

Java 람다 표현식은 입력을 매개변수로 받아들이고 결과 값을 반환하는 짧은 코드 블록입니다.

Q2. Java에서 람다 표현식을 사용하는 것이 좋나요?

답변:

예, 람다 식을 사용하면 다른 API를 더 쉽게 사용하고 지원할 수 있습니다.

Q3. Java 람다의 단점은 무엇입니까?

답변:

Java 람다 함수는 기능적 인터페이스에서만 사용할 수 있습니다.

Q4. 방금 표시된 구문 규칙에 따르면 다음 중 유효한 람다 식이 아닌 것은 무엇입니까?

  1. () -> {}
  2. () -> 괴짜
  3. () -> { geeksforgeeks를 반환합니다.}
  4. (정수 i) -> geeksforgeeks + i를 반환합니다.
  5. (문자열 s) -> {geeksforgeeks;}

답변:

4와 5는 잘못된 람다이고 나머지는 유효합니다. 세부:

  1. 이 람다에는 매개변수가 없으며 void를 반환합니다. 이는 본문이 비어 있는 메소드(public void run() { })와 유사합니다.
  2. 이 람다에는 매개변수가 없으며 문자열을 표현식으로 반환합니다.
  3. 이 람다에는 매개변수가 없으며 문자열을 반환합니다(블록 내에서 명시적인 return 문을 사용하여).
  4. return은 제어 흐름 문입니다. 이 람다를 유효하게 만들려면 다음과 같이 중괄호가 필요합니다: (Integer i) -> { return geeksforgeeks + i; }.
  5. 괴짜를 위한 괴짜는 진술이 아니라 표현입니다. 이 람다를 유효하게 만들려면 다음과 같이 중괄호와 세미콜론을 제거하면 됩니다. (String s) -> geeks for geeks. 또는 원하는 경우 다음과 같이 명시적인 return 문을 사용할 수 있습니다. (String s) -> { return geeks for geeks; }.