[Java 8] 5. UnaryOperator & BinaryOperator

seony·2023년 4월 24일

java8

목록 보기
5/16

⭐️ UnaryOperator Interface

❓ 언제 UnaryOperator를 사용할까?
사실 Function 를 사용해도 된다. 하지만 input과 output이 동일한 형태라면 UnaryOperator를 사용하면 좀 더 편리하다..!

  • UnaryOperator<T>Function<T, T> 인터페이스를 상속받고 있다.
package java.util.function;

@FunctionalInterface
public interface UnaryOperator<T> extends Function<T, T> {

    static <T> UnaryOperator<T> identity() {
        return t -> t;
    }
}

🌱 UnaryOperator 예시

package com.learnJava.functionalInterfaces;

import java.util.function.UnaryOperator;

public class UnaryOperatorExample {

    static UnaryOperator<String> unaryOperator = (s) -> s.concat(" Default");

    public static void main(String[] args) {
        System.out.println(unaryOperator.apply("java8"));
    }
}
  • UnaryOperator를 사용하니 Function 때와 달리 UnaryOperator<String>처럼 제네릭에 String을 하나만 적어주면 된다...!

⭐️ BinaryOperator Interface

  • UnaryOperator와 비슷한 맥락으로 BiFunction을 상속 받는다.
    • 즉, 인자를 2개 받을 수 있다.
  • minBymaxBy 가 추가되어 Comparator를 인자로 받아 2개의 값을 비교할 수 있다.
package java.util.function;

import java.util.Objects;
import java.util.Comparator;

@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T> {

    public static <T> BinaryOperator<T> minBy(Comparator<? super T> comparator) {
        Objects.requireNonNull(comparator);
        return (a, b) -> comparator.compare(a, b) <= 0 ? a : b;
    }

    public static <T> BinaryOperator<T> maxBy(Comparator<? super T> comparator) {
        Objects.requireNonNull(comparator);
        return (a, b) -> comparator.compare(a, b) >= 0 ? a : b;
    }
}
  • minBymaxBy를 사용하여 BinaryOperator 를 인스턴스화한다면 추상 메서드인 applycomparator를 사용하여 비교해 해당 값을 반환하는 apply로 구현된다.

🌱 BinaryOperator 예시

package com.learnJava.functionalInterfaces;

import java.util.Comparator;
import java.util.function.BinaryOperator;

public class BinaryOperatorExample {

    static Comparator<Integer> comparator = (a, b) -> a.compareTo(b);
    
    
    public static void main(String[] args) {
        BinaryOperator<Integer> binaryOperator = (a, b) -> a * b;

        System.out.println(binaryOperator.apply(3, 4));
        
        // maxBy 예시
        BinaryOperator<Integer> maxBy = BinaryOperator.maxBy(comparator);
        System.out.println("Result of MaxBy is : " + maxBy.apply(4, 5));

        // minBy 예시
        BinaryOperator<Integer> minBy = BinaryOperator.minBy(comparator);
        System.out.println("Result of MinBy is : " + minBy.apply(4, 5));

    }
}

결과

12
Result of MaxBy is : 5
Result of MinBy is : 4

0개의 댓글