List<Apple> inventory =
Arrays.asList(
new Apple(80,"green"),
new Apple(155, "green"),
new Apple(120, "red")
);
public static List<Apple> filterGreenApples(List<Apple> inventory){
List<Apple> result = new ArrayList<>();
for(Apple apple: inventory){
if("green".equals(apple.getColor())){
result.add(apple);
}
}
return result;
}
// 실행 코드
List<Apple> greenApples = filterApplesByColor(inventory);
public static List<Apple> filterApplesByColor(List<Apple> inventory, String color){
List<Apple> result = new ArrayList<>();
for(Apple apple: inventory){
if(apple.getColor().equals(color)){
result.add(apple);
}
}
return result;
}
// 실행 코드
List<Apple> greenApples = filterApplesByColor(inventory, "green");
List<Apple> redApples = filterApplesByColor(inventory, "red");
프레디케이트(predicate)
라고 한다.http://drive.google.com/uc?export=view&id=0ByLqiEM75qEzd3h5MnFXd0QyUlE
사과를 선택하는 다양한 전략
interface ApplePredicate{
public boolean test(Apple a);
}
static class AppleWeightPredicate implements ApplePredicate{
public boolean test(Apple apple){
return apple.getWeight() > 150;
}
}
static class AppleColorPredicate implements ApplePredicate{
public boolean test(Apple apple){
return "green".equals(apple.getColor());
}
}
public static List<Apple> filter(List<Apple> inventory, ApplePredicate p){
List<Apple> result = new ArrayList<>();
for(Apple apple : inventory){
if(p.test(apple)){
result.add(apple);
}
}
return result;
}
// 실행List
<Apple> heavyApples = filter(inventory, new AppleWeightPredicate());
List<Apple> redAndHeavyApples = filter(inventory, new AppleRedAndHeavyPredicate());
http://drive.google.com/uc?export=view&id=0ByLqiEM75qEzOW9BSU5OU1otV3c
불필요한 코드