본문 바로가기
java

미리 정의되어 있는 함수형 인터페이스

by improve 2024. 2. 13.

●Predicate<T>

package org.example;

import java.util.Arrays;
import java.util.List;
import java.util.function.IntPredicate;
import java.util.function.Predicate;


public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1,5,7,9,11,12);
        int s;

        s = sum(n -> n%2 ==0, list);
        System.out.println("짝수의 합"+s);

        s = sum(n -> n%2 != 0,list);
        System.out.println("혹수의 합"+s);
    }

    public static int sum(IntPredicate p, List<Integer> lst){
        int s =0;
        for (int n : lst){
            if (p.test(n))
                s +=n;
        }
        return s;
    }
}

이 함수는 boolean Test 와 같이  전달인자를 근거로 참 과 거짓을  반환

 

●Supplier<T>

package org.example;


import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.function.Supplier;


public class Main2 {
    public static void main(String[] args) {
        Supplier<Integer> spr = () -> {
            Random rand = new Random();
            return rand.nextInt(50);
        };
        List<Integer> list = makeIntList(spr,5);
        System.out.println(list);

        list = makeIntList(spr,10);
        System.out.println(list);

    }

    public static List<Integer> makeIntList(Supplier<Integer> s, int n){
        List<Integer> list = new ArrayList();
        for (int i = 0; i < n; i++) {
            list.add(s.get());
        }
        return list;
    }
}

 

이 구문에서 s.get 을 사용하기 위해 Supplier 를 사용했다.

 

●Consumer<T>

무엇인자를 받아 들이기만할수 있다.

package org.example;

import java.util.function.Consumer;

public class Main3 {
    public static void main(String[] args) {
        Consumer<String> c = s -> System.out.println(s);
        c.accept("prneapple");
        c.accept("strawberry");
    }

}

 

출력창에 굳이 적지 않아도 된다.

 

●Funtion<T>

입출력 출력이 있음(수학적으로 함수)

 

package org.example;

import java.util.function.Function;

public class Main4 {
    public static void main(String[] args) {
        Function<String,Integer> f = s -> s.length();
        System.out.println(f.apply("robot"));
        System.out.println(f.apply("system"));
    }
}

 

길이로 출력을 하기 때문에 

문자 갯수로 값이 나온다.

 

'java' 카테고리의 다른 글

필터링 과 맵핑  (0) 2024.02.15
스트림의 이해와 생성  (1) 2024.02.15
람다와 함수형 인터페이스  (1) 2024.02.08
람다의 방식  (0) 2024.02.07
이너 클래스(멤버 로컬 익명)  (0) 2024.02.07