「関数型インターフェース」タグアーカイブ

if文から卒業!Java 8のPredicateで条件分岐をスマートに書く方法

Javaで複雑な条件分岐が増えてくると、if文がネストして読みにくくなる…という悩みを抱えたことはありませんか?
Java 8で追加された**Predicateインターフェース**を使えば、条件式をオブジェクトとして扱えるため、よりスマートで再利用可能な形にできます。

本記事では、Predicateの基本から複数条件の組み合わせ、実用的な活用例まで分かりやすく解説します。


✅ Predicateとは?

Predicate<T> はJava 8で導入された関数型インターフェースで、**「引数を1つ受け取り、booleanを返す関数」**を表します。

test()メソッドに条件式を実装することで、条件判定を行うことができます。


✅ 基本的な使い方

✔ Lambda式で判定条件を定義

ここで、age -> age >= 20 という条件式がPredicateとして表現されています。


✅ 条件を組み合わせる(and/or/negate)

Predicateは以下のような便利なメソッドを持っています。

メソッド説明使用例
and()両方trueでtrueAND条件
or()どちらかtrueでtrueOR条件
negate()条件を反転NOT条件

✔ 使用例


✅ 実用例①:従来のif文から置き換えてスマートに

❌ 従来のif文

✅ Predicateを使った場合

→ 条件式をPredicateとして切り出すことで、再利用しやすくなります。


✅ 実用例②:Listのフィルタリングに活用

stream().filter() と組み合わせるとさらに強力です。

→ 条件式が外部に切り出されることで、読みやすく拡張しやすいコードになります。


🎯 Predicateを使うメリット

項目従来のif文Predicate
可読性ネストしやすい条件名で意図が明確
再利用性条件をコピペ使い回し可能
拡張性if追加が必要and/orで柔軟に拡張

⚠ 濫用しすぎには注意!

Predicateは便利ですが、小規模な処理に無理に使うと逆に複雑化することがあります。
「条件が複数箇所で使い回せる場合」や「複雑なAND/OR条件を定義したい場合」に効果を発揮します。


✅ まとめ

項目内容
Predicateとはbooleanを返す関数型インターフェース
基本test() で条件判定
条件組み合わせand/or/negateでスマートに
実用例if文の代替・Streamのfilterで活躍
メリット可読性・再利用性UP

👉 if文が増えて可読性が下がってきたと感じたら、まずは小さな条件式からPredicate化してみましょう!