람다함수란 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어.
간단히 말하자면 수학에서 사용하는 함수를 보다 단순하게 표현하는 방법이다.
익명 함수 (Anonymous functions) - 람다 대수는 이름을 가질 필요가 없다.
파라미터가 있는 함수는 괄호 안에 지정하여 사용한다.
(매개변수) -> {함수 구현부}
() -> {함수 구현}
- 람다식은 화살표(->)를 사용한다.
- 매개변수가 하나일 경우 매개변수를 생략할 수 있고,
작성할 실행문이 단일일 경우 괄호({})를 생략할 수 있다.- 단, return 식의 단일 실행문의 경우 괄호를 생략할 수 없다.
📚 예시
//정상적인 유형
() -> {}
() -> 1
() -> {return 1;}
(int x) -> x+1
(x) -> x+1
(int x) -> {return x+1;}
x -> {return x+11}
(int x, int y) -> x+y
(x, y) -> x+y
(x, y) -> {return x+y;}
//잘못된 유형
//선언된 type과 선언되지 않은 type을 같이 사용할 수 없다.
(x, int y) -> x+y
(x, final y) -> x+y
🏃♀️ 기존 자바 문법
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Welcome!!");
}
}).start();
🏃♀️ 람다식 문법
new Thread(() -> {
System.out.println("Welcome!!");
}).start();
@FunctionalInterface
Functional Interface는 일반적으로 '구현해야 할 추상 메소드가 하나만 정의된 인터페이스'를 가리킨다.
//구현해야 할 메소드가 한 개이므로 Functional Interface.
@FunctionalInterface
public interface Math {
public int plus(int first, int seconde);
}
//구현해야 할 메소드가 두 개이므로 Fucntional Interface가 아님.
@FunctionalInterface
public interface Math {
public int plus(int first, int second);
public int minus(int first, int secode);
}
📚 함수형 인터페이스 람다 사용 예제
🏃♀️ 함수형 Interface 선언
@FunctionalInterface
Interface Math {
public int Calc(int first, int second);
}
🏃♀️ 추상 메소드 구현 및 함수형 인터페이스 사용
public static void main(String[] args) {
Math plusLambda = (first, second) -> first + second;
System.out.println(plusLambda.Calc(4,2));
Math minusLambda = (first, second) -> first - second;
System.out.println(minusLambda.Calc(4,2));
}
🏃♀️ 실행결과
6
2
IntFunction<>R
int 값의 인수를 받아들이고 결과를 생성하는 함수를 나타낸다.
🏃♀️ 사용 예제
IntFunction intSum = (x) -> x+1;
System.out.println(intSum.apply(1));
🏃♀️ 실행결과
2
BinaryOperator<>T
동일한 유형의 두 피연산자에 대한 연산을 나타내며, 피연산자와 동일한 유형의 결과를 생성한다.
🏃♀️ 사용 예제
BinaryOperator stringSum(x,y) -> x+" "+y
System.out.println(stringSum.apply("Welcome", "Hello"));
🏃♀️ 실행결과
Welcome Hello
📌 Stream 이란?
다양한 데이터를 표준화된 방법으로 다루기 위한 라이브러리이다.
exmaple.stream().filter(x->x<2).count
stream() : 스트림 생성
filter : 중간 연산(스트림 변환), 연속 사용 가능
count : 최종 연산(스트림 사용), 마지막에 단 한번만 사용 가능
✔ Stream의 특징