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に基づく最大値・最小値の選択を簡単に実装できる。- ラムダ式で自由に演算内容を定義できるため、合計や積などの集計処理に最適。
-
JavaにおけるJsonPatchインターフェースの重要性とは?JSONパッチ操作の基本を解説
JavaのJSON Processing APIに含まれるJsonPatchインターフェースは、対象となるJSON構造に適用可能な一連の操作(オペレーション)を格納するためのフォーマットです。 パッチとして保存できる主な操作には、add(追加)、remove(削除)、replace(置換)、copy(コピー)、move(移動)、test(検証)の6種類があります。これらの操作を組み合わせることで、元のJSONドキュメントを直接書き換えることなく、差分だけを効率的に管理し、必要なタイミングで一括して適用することが可能になります。 また、JsonPatchBuilderインターフェースを使用すると
-
JavaのFocusListenerインターフェースとは?重要性と実装方法を解説
FocusListenerインターフェースとはJava AWT/SwingにおけるFocusListenerは、コンポーネントがキーボードフォーカスを取得・喪失したタイミングで発生するイベントを受け取るためのリスナーインターフェースです。ユーザーがどのコンポーネントを操作しているのかを検知できるため、入力フォームのバリデーションやガイド表示など、対話的なUIを実現するうえで重要な役割を担います。フォーカスイベントは、コンポーネントがキーボードフォーカスを取得または喪失したときに生成されます。フォーカスイベントを表すオブジェクトは、FocusEventクラスから作成されます。FocusEvent