Back-End/java
Java8 Predicate를 사용하는 이유
인기쟁이 돌고래
2022. 5. 18. 20:03
아래와 같은 함수를 만들고자 할때 "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);
}
}