Java 8のFunctionとPredicateの違いとは?比較表&サンプルコードで解説
Java 8では、関数型プログラミングをサポートするために、FunctionとPredicateという2つの重要な関数型インターフェースが導入されました。どちらもjava.util.functionパッケージに属しており、ラムダ式やメソッド参照と組み合わせることで、簡潔かつ宣言的なコードを記述できるようになります。
Functionは主に「変換(処理)」を行うためのインターフェースで、1つの引数を受け取り、任意の型の結果を返します。一方、Predicateも同じく1つの引数を受け取りますが、戻り値はboolean型に限定されており、条件が成立しているかどうかの判定に使用されます。
FunctionとPredicateの比較表
| 番号 | 項目 | Function | Predicate |
|---|---|---|---|
| 1 | 基本 | 2つの型パラメータ(T, R)を受け取ります。第1引数が入力の型、第2引数が戻り値の型を表します。 | 1つの型パラメータ(T)を受け取ります。これは入力(引数)の型を表します。 |
| 2 | 戻り値の型 | 任意の型の値を返すことができます。 | boolean型の値のみ返すことができます。 |
| 3 | 抽象メソッド | 抽象メソッドとして apply() を持ちます。 | 抽象メソッドとして test() を持ちます。 |
| 4 | 主な用途 | 値の変換やマッピングなど、データを別の形式へ加工する処理に利用されます。 | 条件判定やフィルタリングなど、条件を満たしているかどうかのチェックに利用されます。 |
Predicateの使用例
public class Main {
public static void main(String args[]) {
List<Integer> numList = new ArrayList<>();
numList.add(5);
numList.add(10);
// 5より大きいかどうかを判定するPredicate
Predicate<Integer> pred = i -> i > 5;
numList.stream().filter(pred).forEach(i -> System.out.println(i));
}
}
このプログラムでは、リスト内の数値の中から条件「5より大きい」を満たす要素だけがフィルタリングされるため、実行結果として「10」が出力されます。
Functionの使用例
public class Main {
public static void main(String args[]) {
List<Integer> numList = new ArrayList<>();
numList.add(78);
numList.add(10);
// 数値を半分に変換するFunction
Function<Integer, Integer> fun = i -> i / 2;
numList.stream().map(fun).forEach(System.out::println);
}
}
このプログラムでは、リスト内の各数値が半分の値に変換されるため、実行結果として「39」と「5」が出力されます。
補足:デフォルトメソッドの活用
Functionには、複数の処理を連結できるandThen()やcompose()といったデフォルトメソッドが用意されています。また、Predicateにも、複数の条件を組み合わせるためのand()・or()・negate()が提供されています。これらを活用することで、柔軟で再利用性の高い変換処理や条件判定を構築できます。
-
JavaのIteratorとEnumerationの違いを徹底比較!使い分けのポイントを解説
はじめに:IteratorとEnumerationとはJavaのコレクションフレームワークには、コレクション内の要素を順番に走査(トラバース)しながらアクセスするための仕組みとして「カーソル」が用意されています。その代表格が Iterator(イテレータ) と Enumeration(列挙) の2つです。両者はどちらもコレクションフレームワークに属しますが、登場した時期と役割が異なります。EnumerationはJDK 1.0から存在する歴史あるインターフェースで、IteratorはJDK 1.2でコレクションフレームワークとともに導入された、より新しいインターフェースです。Enumerati
-
JavaでのArrayListとHashSetの違いを徹底解説!使い分けのポイントも紹介
HashSetとArrayListは、どちらもJavaコレクションフレームワークにおいて最も重要なクラスの一つです。それぞれ特徴が異なるため、用途に応じた適切な使い分けが求められます。本記事では、ArrayListとHashSetの主な違いを6つの観点から比較し、実際のサンプルコードとともにわかりやすく解説します。ArrayListとHashSetの違い一覧No.項目ArrayListHashSet1実装インターフェースListインターフェースを実装しています。Setインターフェースを実装しています。2内部構造内部的には配列(動的配列)を使って実装されています。内部的にはHashMapを使って