JAVA chapter14. 람다식. 14.5 표준 API의 함수적 인터페이스 (2)
JAVA/CONCEPT 2017. 12. 1. 19:55 |14.5.6 andThen()과 compose() 디폴트 메소드
- 함수적 인터페이스가 가지고 있는 디폴트 메소드이다.
- 두 개의 함수적 인터페이스를 순차적으로 연결해서 실행한다.
- 첫번째 리턴값을 두번째 매개값을 제공해서 최종 결과값을 리턴한다
- andThen()과 compose()의 차이점은 어떤 함수적 인터페이스부터 처리하느냐이다.
- compose() 디폴트 메소드 |
- andThen() 디폴트 메소드 |
- andThen()과 compose() 디폴트 메소드를 제공하는 함수적 인터페이스
- Consumer의 순차적 연결
// Consumer 종류의 함수적 인터페이스는 처리 결과를 리턴하지 않기 때문에
andThen()과 compose() 디폴트 메소드는 함수적 인터페이스의 호출 순서만 정한다
Member
|
Address
|
Consumer의 순차적 연결
|
|
- Function 순차적 연결
// Function과 Operator 종류의 함수적 인터페이스는 먼저 실행한 함수적 인터페이스의 결과를
다음 함수적 인터페이스의 매개값으로 넘겨주고, 최종 처리결과를 리턴한다
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 | package sec05.exam07_andthen_compose; import java.util.function.Function; public class FunctionAndThenComposeExample { public static void main(String[] args) { Function<Member, Address> functionA; Function<Address, String> functionB; Function<Member, String> functionAB; String city; functionA = (m) -> m.getAddress(); // 주소리턴 functionB = (a) -> a.getCity(); // 문자열리턴 functionAB = functionA.andThen(functionB); city = functionAB.apply( new Member("홍길동", "hong", new Address("한국", "서울")) ); System.out.println("거주 도시: " + city); // 서울 functionAB = functionB.compose(functionA); city = functionAB.apply( new Member("홍길동", "hong", new Address("한국", "서울")) ); System.out.println("거주 도시: " + city); // 서울 } } | cs |
14.5.7 and(), or(), negate() 디폴트 메소드와 isEqual() 정적 메소드
- and(), or(), negate() 디폴트 메소드
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 | package sec05.exam08_and_or_negate_isequal; import java.util.function.IntPredicate; public class PredicateAndOrNegateExample { public static void main(String[] args) { //2의 배수 검사 IntPredicate predicateA = a -> a%2 == 0; //3의 배수 검사 IntPredicate predicateB = (a) -> a%3 == 0; IntPredicate predicateAB; boolean result; //and() predicateAB = predicateA.and(predicateB); result = predicateAB.test(9); // false System.out.println("9는 2와 3의 배수입니까? " + result); //or() predicateAB = predicateA.or(predicateB); result = predicateAB.test(9); // true System.out.println("9는 2 또는 3의 배수입니까? " + result); //negate() predicateAB = predicateA.negate(); result = predicateAB.test(9); // true System.out.println("9는 홀수입니까? " + result); } } | cs |
- isEqual() 정적 메소드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package sec05.exam08_and_or_negate_isequal; import java.util.function.Predicate; public class PredicateIsEqualExample { public static void main(String[] args) { Predicate<String> predicate; predicate = Predicate.isEqual(null); System.out.println("null, null: " + predicate.test(null)); // true predicate = Predicate.isEqual("Java8"); System.out.println("null, Java8: " + predicate.test(null)); // false predicate = Predicate.isEqual(null); System.out.println("Java8, null: " + predicate.test("Java8")); // false predicate = Predicate.isEqual("Java8"); System.out.println("Java8, Java8: " + predicate.test("Java8")); // true predicate = Predicate.isEqual("Java8"); System.out.println("Java7, Java8: " + predicate.test("Java7")); // false } } | cs |
14.5.8. minBy(), maxBy() 정적 메소드
1 2 3 4 5 6 7 8 9 10 11 | package sec05.exam09_minby_maxby; public class Fruit { public String name; public int price; public Fruit(String name, int price) { this.name = name; this.price = price; } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package sec05.exam09_minby_maxby; import java.util.function.BinaryOperator; public class OperatorMinByMaxByExample { public static void main(String[] args) { BinaryOperator<Fruit> binaryOperator; Fruit fruit; binaryOperator = BinaryOperator.minBy((f1,f2)->Integer.compare(f1.price, f2.price)); fruit = binaryOperator.apply(new Fruit("딸기", 6000), new Fruit("수박", 10000)); System.out.println(fruit.name); // 딸기 binaryOperator = BinaryOperator.maxBy((f1,f2)->Integer.compare(f1.price, f2.price)); fruit = binaryOperator.apply(new Fruit("딸기", 6000), new Fruit("수박", 10000)); System.out.println(fruit.name); // 수박 } } | cs |
'JAVA > CONCEPT' 카테고리의 다른 글
JAVA chapter17. JavaFX. 17.1 JavaFX 개요. 17.2 JavaFX 애플리케이션 개발 시작 (0) | 2017.12.03 |
---|---|
JAVA chapter14. 람다식. 14.6 메소드 참조 // 추가하기 (0) | 2017.12.02 |
JAVA chapter14. 람다식. 14.5 표준 API의 함수적 인터페이스 (1) (0) | 2017.12.01 |
JAVA chapter14. 람다식. 14.4 클래스 멤버와 로컬 변수 사용 (0) | 2017.12.01 |
JAVA chapter14. 람다식. 14.1 람다식이란?. 14.2 람다식 기본 문법. 14.3 타겟 타입과 함수적 인터페이스 (0) | 2017.11.30 |