본문 바로가기
Back-End/java

Java8 Predicate를 사용하는 이유

by 인기쟁이 돌고래 2022. 5. 18.

아래와 같은 함수를 만들고자 할때 "i%2" 와 같이 조건문만 변경되는데 함수가 2개나 나와야한다 (중복 코드많아짐)

// 짝수만 골라내는 함수
public static List<Integer> evenList(List<Integer> input) {
        ArrayList<Integer> result = new ArrayList<>();
        for(int i : input) {
            if(i %2 == 0)
                result.add(i);
        }
        return result;
    }
// 홀수만 골라내는 함수
public static List<Integer> oddList(List<Integer> input) {
    ArrayList<Integer> result = new ArrayList<>();
    for(int i : input) {
        if(i %2 == 1)
            result.add(i);
    }
    return result;
}

저 조건문만 변경하면 될때 Predicate를 써주면 하나로 통일 가능!

public static List<Integer> filter(List<Integer> input, Predicate<Integer> predicate) {
        ArrayList<Integer> result = new ArrayList<>();
        for(int i : input) {
            if(predicate.test(i))
                result.add(i);
        }
        return result;
    }

Main함수에서 쓰일때 

public static void main(String[] arg) {
        ArrayList<Integer> input = new ArrayList<>();
        input.add(3);
        input.add(2);

        List<Integer> evenList = evenList(input);
        System.out.println(evenList);
        List<Integer> evenList2 = filter(input, (num) -> num % 2 == 0);
        System.out.println(evenList2);
    }

 

 

 


(참고) 통소스 

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class Main {
    public static List<Integer> evenList(List<Integer> input) {
        ArrayList<Integer> result = new ArrayList<>();
        for(int i : input) {
            if(i %2 == 0)
                result.add(i);
        }
        return result;
    }

    public static List<Integer> oddList(List<Integer> input) {
        ArrayList<Integer> result = new ArrayList<>();
        for(int i : input) {
            if(i %2 == 1)
                result.add(i);
        }
        return result;
    }

    public static List<Integer> filter(List<Integer> input, Predicate<Integer> predicate) {
        ArrayList<Integer> result = new ArrayList<>();
        for(int i : input) {
            if(predicate.test(i))
                result.add(i);
        }
        return result;
    }

    public static void main(String[] arg) {
        ArrayList<Integer> input = new ArrayList<>();
        input.add(3);
        input.add(2);

        List<Integer> evenList = evenList(input);
        System.out.println(evenList);
        List<Integer> evenList2 = filter(input, (num) -> num % 2 == 0);
        System.out.println(evenList2);
    }
}

댓글