Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのBinaryOperatorインターフェースとは?使い方と実装例を解説

BinaryOperatorインターフェースは、同じ型の2つのオペランド(引数)を受け取り、そのオペランドと同じ型の結果を1つ返す操作を表す関数型インターフェースです。java.util.functionパッケージに含まれており、Java 8以降で利用できます。

BinaryOperatorはBiFunction<T, T, T>を継承しており、主に集計処理やリダクション(畳み込み)演算などで活用されます。例えば、Stream APIのreduce()メソッドと組み合わせることで、要素の合計値や最大値の算出などを簡潔に記述できます。

BinaryOperatorの主な静的メソッド

BinaryOperatorインターフェースには、以下の2つの便利な静的メソッドが用意されています。

メソッド説明
maxBy(Comparator<? super T> comparator)指定されたComparatorに従って、2つの要素のうち大きい方を返すBinaryOperatorを返します。
minBy(Comparator<? super T> comparator)指定されたComparatorに従って、2つの要素のうち小さい方を返すBinaryOperatorを返します。

例1:maxBy()を使った最大値の取得

まずはmaxBy()メソッドを使って、2つの整数のうち大きい方を返す例を見てみましょう。

import java.util.function.BinaryOperator;
public class Demo {
    public static void main(String args[]) {
        BinaryOperator<Integer>
        operator = BinaryOperator
        .maxBy(
        (x, y) -> (x > y) ? 1 : ((x == y) ? 0 : -1));
        System.out.println(operator.apply(120, 5));
    }
}

実行結果

120

この例では、比較ロジックをラムダ式で定義し、maxBy()に渡しています。その結果、apply(120, 5)を実行すると、より大きい値である120が出力されます。

例2:ラムダ式で独自の演算を定義する

次に、ラムダ式を使って掛け算を行うBinaryOperatorを自作する例です。

import java.util.function.BinaryOperator;
public class Demo {
    public static void main(String args[]) {
        BinaryOperator<Integer> operator = (x, y) -> x * y;
        System.out.println(operator.apply(5, 7));
    }
}

実行結果

35

このように、(x, y) -> x * yというシンプルなラムダ式で乗算のロジックを定義でき、apply(5, 7)の結果として35が出力されます。

まとめ

  • BinaryOperatorは「同型の2つの引数」を受け取り「同型の結果」を返す関数型インターフェース。
  • maxBy()minBy()を使うと、Comparatorに基づく最大値・最小値の選択を簡単に実装できる。
  • ラムダ式で自由に演算内容を定義できるため、合計や積などの集計処理に最適。
  1. JavaにおけるJsonPatchインターフェースの重要性とは?JSONパッチ操作の基本を解説

    JavaのJSON Processing APIに含まれるJsonPatchインターフェースは、対象となるJSON構造に適用可能な一連の操作(オペレーション)を格納するためのフォーマットです。 パッチとして保存できる主な操作には、add(追加)、remove(削除)、replace(置換)、copy(コピー)、move(移動)、test(検証)の6種類があります。これらの操作を組み合わせることで、元のJSONドキュメントを直接書き換えることなく、差分だけを効率的に管理し、必要なタイミングで一括して適用することが可能になります。 また、JsonPatchBuilderインターフェースを使用すると

  2. JavaのFocusListenerインターフェースとは?重要性と実装方法を解説

    FocusListenerインターフェースとはJava AWT/SwingにおけるFocusListenerは、コンポーネントがキーボードフォーカスを取得・喪失したタイミングで発生するイベントを受け取るためのリスナーインターフェースです。ユーザーがどのコンポーネントを操作しているのかを検知できるため、入力フォームのバリデーションやガイド表示など、対話的なUIを実現するうえで重要な役割を担います。フォーカスイベントは、コンポーネントがキーボードフォーカスを取得または喪失したときに生成されます。フォーカスイベントを表すオブジェクトは、FocusEventクラスから作成されます。FocusEvent