개발언어/JAVA

JAVA 람다와 스트림 - java.util.funtion 패키지

Surge100 2023. 12. 18. 13:11

java.util.funtion 패키지

 

▶ 자주 사용되는 다양한 함수형 인터페이스를 제공

 

Predicate 예시

Predicate<String> isEmptyStr = s -> s.length()==0;
String s = "";

if(isEmptyStr.test(s)) //if(s.lengh()==0);
	System.out.println("This is empty String");

 

함수형 인터페이스 Predicate<T>를 사용할 때 람다 함수의 반환 값의 타입은 boolean이어야 한다. 

 

 

▶ 매개변수가 2개인 함수형 인터페이스

매개 변수를 2개 받는 함수형 인터페이스 까지는 미리 정의 가 되어있지만 3개를 받는 것은 정의되어 있지 않다.

 

매개변수를 3개 가지는 함수형 인터페이스 

@FunctionalInterface
interface TriFunction<T,U,V,R>{
  R apply(T t, U u, V v);
}

 

매개 변수 3개를 가진 즉 입력을 3개를 받는 함수형 인터페이스는 위 코드 처럼 직접 정의하여 사용할 수 있다.

 

 

▶매개변수 타입과 반환타입이 일치하는 일치하는 함수형 인터페이스

 

정리 예제 

package lambda;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class Quiz {
    public static void main(String[] args) {
        Supplier <Integer> s = () -> (int)(Math.random()*100)+1;
        Consumer<Integer> c = i -> System.out.print(i +", ");
        Predicate<Integer> p = i -> i%2==0;
        Function<Integer,Integer> f = i -> i/10*10;

        // list를 랜덤값으로 채운다.
        List<Integer> list = new ArrayList<>();
        makeRandomList(s,list);
        System.out.println(list);

        //짝수를 출력
        printEvenNum(p,c,list);

        //1의 자리 절삭한 list 출력
        List<Integer> newList = doSomething(f,list);
        System.out.println(newList);

    }

    static <T> List<T> doSomething(Function<T,T>f,List<T>list){
        List<T> newList =new ArrayList<T>(list.size());

        for(T l :list) {
            newList.add(f.apply(l));
        }

        return newList;
    }

    static void printEvenNum(Predicate<Integer> p, Consumer<Integer> c, List<Integer> list){

        System.out.print("[");

        for(int l: list){
            if(p.test(l)){
                c.accept(l);
            }
        }

        System.out.println("]");
    }

    static  <T> void makeRandomList(Supplier<T> s, List<T> list){
        for(int i =0; i <10; i++){
            // Supplier로 부터 1~100의 난수를 받아서 list에 추가
            list.add(s.get());
        }
    }
}

 

 

 

 

[출처 - 자바의 정석 - 기초편 , 저 남궁성]

https://www.youtube.com/watch?v=0Sp9eFRV8gE