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でtrue | AND条件 |
or() | どちらかtrueでtrue | OR条件 |
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化してみましょう!