람다식 (Lambda)
( java8 에서 지원하기 된 lambda )
//람다식의 구조
{데이터 타입 매개변수, ... } -> { 실행문 , ...}
좌측 매개변수를 사용하여 -> 우측 중괄호 {} 부분을 실행한다
람다식을 사용하는 이유는 불필요한 클래스 정의도 필요없고 메소드도 필요가 없다.
그래서 람다는 익명함수라고도 불린다.
@FunctionalInterface
추상 메서드가 오직 하나인 함수형 인터페이스
위 어노테이션은 해당 인터페이스가 함수형 인터페이스 조건에 맞는지 검사
즉 컴파일러에 추상 메서드가 하나만 있는지 확인하게한다
아래는 함수형 인터페이스를 통해 더하기와 제곱을 계산하는 람다식 예제
public class lambdaExam {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num1 = sc.nextInt();
int num2 = sc.nextInt();
myCalc sum = (a,b) -> {return a+b; };
System.out.println(sum.calc(num1,num2));
myCalc2 multi = a -> {return a*a;};
System.out.println(multi.calc(num1));
sc.close();
}
@FunctionalInterface
interface myCalc{
int calc(int x, int y);
}
@FunctionalInterface
interface myCalc2{
int calc(int x);
}
}
자바에서 제공하는 함수형 인터페이스
1. cumsumer<T>
입력값은 있지만 리턴은 없다
객체 T를 매개변수로 받는다.
앞에 데이터 타입이 명시되어 있어 구분이 쉽다
2. supplier
입력 값은 없고 리턴은 있다
public class ConsumerSupplier {
public static void main(String[] args) throws IOException {
//Consumer<T>
//사용 후 반환x (void)
Consumer<String> c = name -> System.out.println(name+"hello");
c.accept("hello java");
IntConsumer ic = page -> System.out.println("int ic test " + page);
ic.accept(54);
//Supplier<T>
//입력값은 없고 반환값만
Supplier<String> ss = () -> "supplier interface have return";
String result1 = ss.get();
System.out.println(result1);
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
BooleanSupplier bs = () -> a>b;
boolean resultBs = bs.getAsBoolean();
System.out.println(resultBs);
bf.close();
}
}
3. Function<T, R>
제공하는 apply 메소드로 객체 T를 입력받아 R로 매핑한다.
기본 데이터 타입 + Function (intFunction<R> ...등)
기본 데이터 타입을 입력받아 다른 기본 데이터 타입으로 반환
4. Operator 타입
매개변수를 입력받아 계산 후 리턴값을 돌려준다.
Function의 apply 메소드와 달리 연산 수행 후 동일타입 반환 값
public class FunctionOperator {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
int inputN = Integer.parseInt(st.nextToken());
//Function<T,R>
//T= 매개변수 를
//R= 반환값 으로 변환하여 반환
Function<Integer, String> integerToString = num -> Integer.toString(num);
String str = integerToString.apply(inputN);
System.out.println("Integer to str " + str);
int strToInt = StrToInt(str);
System.out.println("str to int " + strToInt );
System.out.println(strToInt == inputN);
//Operator 타입
//UnaryOperator<T> 객체 하나를 연산하여 T타입 return
UnaryOperator<Integer> uo = num -> {return num*10;};
int resultNum = uo.apply(strToInt);
System.out.println(resultNum);
bf.close();
}
private static int StrToInt(String str) {
ToIntFunction<String> strToInt = Integer::parseInt;
return strToInt.applyAsInt(str);
}
}
[Java] 람다식(Lambda Expressions) 사용법 및 예제
자바8에서 '람다식(Lambda Expression)'이 지원되면서 자바는 완전히 새로운 언어처럼 보이기 시작했다. 지네릭스(Generics)가 자바을 크게 변화시킨 것처럼 람다식 역시 자바를 어마어마하게 변화시켰
hbase.tistory.com
[JAVA] JAVA의 람다식 사용법 및 다양한 작성 예제 | Yoon's Dev
JAVA의 람다식(lambda) 사용법 및 다양한 작성 예제 Java의 람다식 ■ 자바의 람다식 ✓ 람다식(lambda) - 자바에서는 함수를 메서드라고 부르고 메서드의 형태로 존재 - 자바 람다식의 구조 . (argument)
yooniron.tistory.com
Java 8 함수형 인터페이스 (Functional Interface)
Overview 함수형 인터페이스란 1 개의 추상 메소드를 갖는 인터페이스를 말합니다. Java8 부터 인터페이스는 기본 구현체를 포함한 디폴트 메서드 (default method) 를 포함할 수 있습니다. 여러 개의 디
bcp0109.tistory.com
'수업 & 공부' 카테고리의 다른 글
Stream (0) | 2022.10.03 |
---|---|
Thread (lambda) (0) | 2022.10.03 |
Wrapper Class란 (0) | 2022.09.29 |
Java - Collection (0) | 2022.09.29 |
동적 계획법 알고리즘 (Dynamic Programming) (0) | 2022.09.06 |