ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA 람다와 스트림 - java.util.funtion 패키지
    개발언어/JAVA 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

    댓글

Designed by Tistory.