[사이드 프로젝트] 함수형 프로그래밍 익히기 With Java - Predicate

gimseonjin616·2022년 5월 12일
0

Predicate

Predicate는 해당 값이 참인지 거짓인지 구분해주는 함수다.

test라는 추상 메소드를 가지고 있으며 하나의 파라미터를 받을 수 있다.

예를 들어 Integer를 받아와서 해당 값이 0보다 큰 지 구분하는 기능은 아래와 같다.

public class Main {
    public static void main(String[] args){
        Predicate<Integer> isPositive = x -> x > 0;

        boolean result = isPositive.test(10);

        System.out.println(result);
    }
}

Predicate & forEach = Filter

이전에 구현했던 ForEach와 Predicate를 조합하면 Filter를 구현할 수 있다.

Filter는 List를 받아와서 넘겨 받은 Predicate가 참인 값만 추린 List를 반환하는 함수다.

예를 들어 1~5까지 수가 담겨있는 리스트에서 3 이상의 값만 추려내는 fillter를 구현하면 아래와 같다.

추가적으로 forEach와 적절히 조합하여 하나씩 출력할 수 있다.

public class Filter {
    public static void main(String[] args){

        List<Integer> iList = Arrays.asList(1,2,3,4,5);

        forEach(
                filter(iList, (x)-> x > 3),
                (x) -> System.out.println(x));
    }

    public static <T> void forEach(
            List<T> list, Consumer<T> processor
    ){
        for(T t : list){
            processor.accept(t);
        }
    }

    public static <T> List<T> filter(List<T> list, Predicate<T> process){
        List<T> newList = new ArrayList<>();

        forEach(list, (x)->{
            if(process.test(x)){
                newList.add(x);
            }
        });

        return newList;
    }

}
profile
to be data engineer

0개의 댓글