java

[java] Functional Interface : Consumer, Predicate 알아보기

우주유령 2022. 8. 4. 09:01
728x90
반응형

Consumer<T>

consumer는 그냥 소비하는 역할을 한다. (일반적으로 아무것도 return 하지 않는다고 보면 된다.)

 

메소드

  • void accept (T t)
  • default Consumer<T> andThen(Consumer<? super T> after)
List<String> fruits = Arrays.asList("apple", "kiwi", "orange");

Consumer<List<String>> addNumber = list -> {
    for (int i = 0; i < list.size(); i++) {
        list.set(i, (i + 1) + ". " + list.get(i));
    }
};

Consumer<List<String>> printList = list -> {
    for (String fruit : list) {
        System.out.println(fruit);
    }
};

addNumber.andThen(printList).accept(fruits);
// 1. apple
// 2. kiwi
// 3. orange

 

Predicate<T> : return Boolean

predicate은 비교할 때 사용한다.

 

메소드

  • test : 값을 넘겨서 predicate를 수행
  • and / or : and나 or조건
  • static isEqual : 값이 같은지 확인
  • negate : Predicate가 리턴하는 값과 반대되는 값을 리턴하는 Predicate를 리턴

💡 predicate의 쓰임 : stream.fillter()는 predicate을 받는다.

        //test
        Predicate<Integer> predicate = (num) -> num > 10;
        boolean result = predicate.test(100);
     
        //and
        Predicate<Integer> predicate1 = num -> num > 10;
        Predicate<Integer> predicate2 = num -> num < 20;
        boolean result2 = predicate1.and(predicate2).test(25);     

        //or
        boolean result3 = predicate1.or(predicate2).test(5);     

        //isEqual //Stream
        Stream<Integer> stream = IntStream.range(1, 10).boxed(); // Integer로 boxed된 stream을 반환
        stream.filter(Predicate.isEqual(5)).forEach(System.out::println);

        //negate
        Predicate<Integer> negatePredicate = predicate1.negate();
        result5 = negatePredicate.test(100);

 

728x90
반응형