1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
public static List<Apple> filterGreenApples(List<Apple> inventory) { List<Apple> result = new ArrayList<>();
for (Apple apple : result) { if ("GREEN".equals(apple.getColor())) { result.add(apple); } } return result; } 아주 기본적인 그린이 있는지 확인하는 메서드
public static List<Apple> filterApplesByColor(List<Apple> inventory, Color color) { List<Apple> result = new ArrayList<>(); for (Apple apple : result) { if (apple.getColor().equals(color)) { result.add(apple); } } return result; } 하지만, 다른 것을 추가할 경우 문제가 생기므로 다음과 같이 공통화 시킨다.
public interface ApplePredicate{ boolean test(Apple apple); } 여러 조건이 있을 수 있는데, 이를 인터페이스를 이용해 해결해보자. predicate은 true/false를 반환하는 함수를 일컫는다.
public class AppleHeavyWeightPredicate implements ApplePredicate { public boolean test(Apple apple) { return apple.getWeight()>150; } } 무게가 150 이상일 때 true 반납하는 메서드
public class AppleGreenColorPredicate implements ApplePredicate { public boolean test(Apple apple) { return "GREEN".equals(apple.getColor()); } } 녹색일 때 true 반납하는 메서드
public static List<Apple> filterApples(List<Apple> inventory, ApplePredicate p) { List<Apple> result=new ArrayList<>(); for (Apple apple : result) { if(p.test(apple)){ result.add(apple); } } return result; } 이제 interface인 ApplePredicate로 받아서 이용한다 (다형성 특징 이용)
List<Apple> redAndHeavyApples=filterApples(inventory,new AppleGreenColorPredicate()); 익명 클래스로 하나하나 정의하는 것을 줄임
List<Apple> result = filterApples(inventory, (Apple apple) -> "RED".equals(apple.getColor())); 람다로 깔끔하게 줄임
public interface Predicate<T>{ boolean test(T t); }
public static <T> List<T> filter(List<T> list, Predicate<T> p) { List<T> result=new ArrayList<>(); for (T t : list) { if(p.test(t)){ result.add(t); } } return result; } 리스트 형식으로 추상화 하였다. |
cs |
'Spring' 카테고리의 다른 글
스프링 시큐리티 denied Page 404 뜨는 이유 (0) | 2020.07.31 |
---|---|
Spring Data JPA, Querydsl 조금 정리 (0) | 2020.07.21 |
java final static 붙이는 이유, lombok 어노테이션 (0) | 2020.07.17 |
부트 이것저것... (0) | 2020.06.29 |
부트와 이것 저것 (RequiredArgsConstructor ...) (0) | 2020.06.26 |