カテゴリ: Java 更新日: 2026/03/11

JavaのStreamインターフェースのfilterの使い方を完全ガイド!初心者でもわかるデータ抽出

Streamのfilterメソッド
Streamのfilterメソッド

先生と生徒の会話形式で理解しよう

生徒

「Javaで大量のデータから条件に一致するものだけを取り出したいときってどうすればいいんですか?」

先生

「そんなときに使えるのがjava.utilパッケージのStreamインターフェースです。さらに、条件に合うデータを選びたいときはfilterメソッドがとても便利です。」

生徒

「filterって名前からして選別している感じがしますね。実際にはどんな感じで使うんですか?」

先生

「具体例を交えて説明するとイメージしやすいので、ひとつずつ見ていきましょう。」

1. Streamとは何かを理解しよう

1. Streamとは何かを理解しよう
1. Streamとは何かを理解しよう

JavaのStreamは配列やリストといったデータを処理するための仕組みで、データの集まりを流れるように取り扱うという特徴があります。従来はfor文を使ってひとつずつ処理をしていましたが、Streamを使うと短くわかりやすい書き方で記述できるので、読みやすく保守性が高いコードになります。初心者が理解するポイントは、Streamそのものがデータを持っているのではなく、リストや配列などから生成して流れを作るという考え方です。この流れに対して、フィルタリングやマッピングといった操作を重ねることで複雑な処理をすらすらと書くことができるのが大きなメリットです。

2. filterメソッドで必要なデータだけを取り出す

2. filterメソッドで必要なデータだけを取り出す
2. filterメソッドで必要なデータだけを取り出す

filterメソッドは、条件に一致するデータだけを通過させる仕組みを持っています。例えば整数のリストから偶数だけを取り出したり、文字列のリストから特定の単語を含むものだけを選び出すといった使い方ができます。filterメソッドの中には条件を表すラムダ式を記述するため、初心者は最初に戸惑うことがありますが、実は考え方はとても簡単で、条件に一致すれば残り、一致しなければ除外されるだけです。この選別がStream処理の中でとても重要で、特に大量のデータを扱うプログラムではfilterを利用するだけでプログラムがすっきりと読みやすくなります。

3. 基本的なfilterのサンプルコード

3. 基本的なfilterのサンプルコード
3. 基本的なfilterのサンプルコード

ここでは実際に整数のリストから偶数を取り出す例を見てみましょう。


import java.util.Arrays;
import java.util.List;

public class FilterExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

        numbers.stream()
               .filter(n -> n % 2 == 0)
               .forEach(System.out::println);
    }
}

filterの中ではラムダ式を使って条件を書いています。このコードでは偶数だけが画面に表示されます。


2
4
6

4. 文字列に対してfilterを使う例

4. 文字列に対してfilterを使う例
4. 文字列に対してfilterを使う例

文字列のリストから特定の文字列を含むものだけを選びたい場合にもfilterが使えます。


import java.util.Arrays;
import java.util.List;

public class FilterStringExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("田中", "山田", "佐藤", "山本");

        names.stream()
            .filter(name -> name.startsWith("山"))
            .forEach(System.out::println);
    }
}

山田
山本

このようにfilterを使うと、条件に合うデータだけを簡単に取り出すことができます。

5. filterと組み合わせることでできる便利な処理

5. filterと組み合わせることでできる便利な処理
5. filterと組み合わせることでできる便利な処理

filterは単体でも便利ですが、他のStreamメソッドと組み合わせるとさらに強力になります。例えばmapを使って形式を変換したり、sortedで並び替えたり、distinctで重複を取り除くなど、いろいろな操作と一緒に利用する場面がたくさんあります。また、limitを使えば件数を絞り込むこともできるため、大量のデータ処理を短いコードで表現できるようになります。Streamは小さな部品を組み合わせて使うほど効果を発揮し、filterはその中心的な役割を持つメソッドと言えます。

6. 実務でよくあるfilterの利用場面

6. 実務でよくあるfilterの利用場面
6. 実務でよくあるfilterの利用場面

業務システムでは、売上データ、顧客データ、商品の情報など、大量のデータを扱うことが珍しくありません。例えば売上データの中から特定の日付だけを取り出したい、在庫数が一定以下の商品だけを抽出したい、登録済みのユーザー情報から有効なアカウントだけを選びたいなど、条件で絞り込む処理は必ず登場します。filterを使えばコードが読みやすく、メンテナンスも容易になり、複雑な処理をスムーズに表現できます。従来のfor文では煩雑に見えてしまう処理でも、filterを取り入れることで構造がはっきりし、初心者でも理解しやすいコードが書けるようになります。

また、filterはStreamを途中で止めることなく、次の処理へつなげられるため、複数の条件を段階的に重ねたいときにも向いています。例えば年齢が二十歳以上で名前に特定の文字が含まれるユーザーだけを選ぶといった細かな絞り込みも短いコードで書けるので、開発が効率的になります。

7. 複数条件でfilterを使う例

7. 複数条件でfilterを使う例
7. 複数条件でfilterを使う例

次は複数の条件を組み合わせる例です。


import java.util.Arrays;
import java.util.List;

public class MultiFilterExample {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(3, 10, 15, 20, 25, 30);

        list.stream()
            .filter(n -> n > 10)
            .filter(n -> n % 5 == 0)
            .forEach(System.out::println);
    }
}

15
20
25
30

複数のfilterを重ねても処理は読みやすく、処理の意味がはっきりします。初心者が複雑な条件を書くときにも、filterを分けることで理解しやすくなるためおすすめです。

8. filterで何もヒットしなかった場合の注意点

8. filterで何もヒットしなかった場合の注意点
8. filterで何もヒットしなかった場合の注意点

filterを使っても条件に一致するデータが一つもない場合があります。そのときは出力されるデータが存在しないだけで、エラーにはなりません。ただし、そのあとに結果を扱う処理がある場合、データが空になっている可能性を考える必要があります。特にfindFirstやfindAnyのように単一の値を取得するときは、Optionalを使って値の存在を確認することが多いです。この考え方はエラーを未然に防ぐためにとても大切で、実務の現場でもよく使われています。

9. まとめて処理することで読みやすいコードを実現

9. まとめて処理することで読みやすいコードを実現
9. まとめて処理することで読みやすいコードを実現

filterを使ったStream処理は、従来のfor文やif文だけでは読みづらくなってしまうロジックをとてもすっきりと表現できます。初心者でも書きやすく、慣れてくれば複雑な処理を短く書くことができるようになるため、学習の効果が大きいメソッドです。データを集めて加工して表示するという一連の流れを組み立てる力は、Javaのスキル全体を底上げすることにつながります。

フィルタリングという単純な処理でも、実際のプログラムでは頻繁に登場し、Streamとfilterの知識があるだけで開発がスムーズに進みます。今後はfilterのあとにmapやsortedなどを組み合わせ、より複雑なデータ処理にも挑戦してみてください。ひとつひとつのメソッドを理解することで、Javaのプログラミングがさらに楽しくわかりやすいものになっていきます。

カテゴリの一覧へ
新着記事
New1
Java
JavaのStreamインターフェースのfilterの使い方を完全ガイド!初心者でもわかるデータ抽出
新規投稿
New2
Java
Javaの@SafeVarargsアノテーションの使い方を完全ガイド!初心者でもわかる可変長引数の安全性
更新記事
New3
Java
JavaのHashSetの使い方を完全ガイド!初心者でもわかるセットの使い方
更新記事
New4
Thymeleaf
Thymeleafで日付をフォーマットする方法は?初心者向けガイド
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.3
Java&Spring記事人気No3
Spring
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定
No.4
Java&Spring記事人気No4
Spring
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
Java
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.8
Java&Spring記事人気No8
Spring
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方