Java 8 - BinaryOperator 예제

By JS | Last updated: May 30, 2021

BinaryOperator는 Type T의 인자 두개를 받고, 동일한 Type T 객체를 리턴하는 함수형 인터페이스입니다.

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;
  }
}

BinaryOperator는 BiFunction를 상속하며, apply()를 호출하여 어떤 작업을 수행할 수 있습니다. 또한, minBy(), maxBy()라는 static 메소드를 제공합니다.

public interface BiFunction<T, U, R> {

      R apply(T t, U u);

}

Example 1 : BinaryOperator

BinaryOperator는 Lambda 표현식으로 구현할 수 있습니다. apply()에 두개의 인자를 전달하면 같은 타입의 객체가 리턴됩니다.

import java.util.function.BinaryOperator;

public class BinaryOperatorExample1 {

    public static void main(String[] args) {

        BinaryOperator<Integer> binaryOperator = (n1, n2) -> n1 + n2;

        Integer sum = binaryOperator.apply(10, 100);

        System.out.println(sum);
    }
}

Output:

110

Example 2 : maxBy()

maxBy()는 Comparator를 이용하여 두개의 객체를 비교하고 큰 값을 리턴하는 BinaryOperator를 생성합니다. 아래 코드처럼 Comparator가 비교하는 내용을 구현하여 인자로 전달해야 합니다.

apply()에 두개의 객체를 전달하면 큰 객체가 리턴됩니다.

import java.util.function.BinaryOperator;

public class BinaryOperatorExample2 {

    public static void main(String[] args) {

        BinaryOperator<Item> binaryOperator = BinaryOperator.maxBy(
                (Item i1, Item i2) -> i1.getId() - i2.getId());

        Item item1 = new Item(10, "first");
        Item item2 = new Item(20, "second");

        Item max = binaryOperator.apply(item1, item2);

        System.out.println(max);
    }
}
// Item.java

public class Item {
    private int id;
    private String value;
    public Item(int id, String value) {
        this.id = id;
        this.value = value;
    }

    public int getId() {
        return id;
    }

    public String getValue() {
        return value;
    }

    @Override
    public String toString() {
        return "[id = " + id + ", value = " + value + "]";
    }
}

Output:

[id = 20, value = second]

Example 3 : minBy()

minBy()는 두 객체를 비교하여 작은 값을 리턴하는 BinaryOperator를 생성합니다. 구현 및 사용 방법은 maxBy()와 동일합니다.

import java.util.function.BinaryOperator;

public class BinaryOperatorExample3 {

    public static void main(String[] args) {

        BinaryOperator<Item> binaryOperator = BinaryOperator.minBy(
                (Item i1, Item i2) -> i1.getId() - i2.getId());

        Item item1 = new Item(10, "first");
        Item item2 = new Item(20, "second");

        Item min = binaryOperator.apply(item1, item2);

        System.out.println(min);
    }
}

Output:

[id = 10, value = first]

References

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha