수학에서 인수로 값을 받아 true나 false로 반환을 해주는 함수를 프레디케이트(predicate)라고 한다.
선택조건을 결정하는 인터페이스
public interface ApplePredicate{
boolean test(Apple apple);
}
이제 상속을 받아서 여러가지 조건을 달아준다.
public class AppleHeavyWeightPredicate implements ApplePredicate{
public boolean test(Apple apple){
return apple.getWeight()>150;
}
}
public class AppleGreenColorPredicate implements ApplePredicate{
public boolean test(Apple apple){
return "green".equals(apple.getColor());
}
}
public static List<Apple> filterApples(List<Apple> inventory, Predicate<Apple> p) {
List<Apple> result = new ArrayList<>();
for (Apple apple : inventory) {
if (p.test(apple)) {
result.add(apple);
}
}
return result;
}
위와같이 다양한 조건을 가진 프레디케이트를 인자로 받으면 하나의 메서드를 안고치고 사용자가 요구하는 조건들을 만족시킬수 있다.
하지만 새로운 클래스와 인스턴스를 생성하는게 귀찮은 개발자들은 람다식을 이용하여 더 간결하게 코드 작성이가능하다.
List<Apple> result=filterApples(inventory,(Apple apple) -> "red".equals(apple.getColor()));
한줄로 해결이 가능하다
이와같이 람다가 나오는 과정을 알아보았다.