Stream APIによる処理は、大雑把に以下のように分類できます。
- データソースからStreamを生成
- 加工/フィルターなどの中間処理
- 最終的な集計/出力などの終端処理
たとえば以下は、リストから5文字以上の文字列だけを抽出し、その頭文字だけを順に出力する例です。
StreamBasic.java
- package com.example.mynavi.streamapi;
- import java.util.List;
- public class StreamBasic {
- public static void main(String[] args) {
- var data = List.of("あいう", "かきくけこ", "さしすせそ");
- data
- // ①Streamを生成
- .stream()
- // ②中間処理(加工)
- .filter(s -> s.length() >= 5)
- .map(s -> s.substring(0))
- // ③終端処理
- .forEach(System.out::println);
- }
- }
▼
- かきくけこ
- さしすせそ
リスト(ArrayList)からStreamを生成するにはstreamメソッドを呼び出すだけです。この例であればString型のリストなので、生成されるのもStream<String>です。
Streamを生成できたら、これを流れる値を処理(加工)するのが中間処理です(②)。ここではfilterメソッドで文字数が5以上である文字列だけを残し、残った文字列からsubstringメソッドで頭文字だけ取り出します。このように中間処理は必要に応じて複数あっても構いませんし、不要であれば省略しても構いません。
最終的な処理結果を出力するのが最終処理です。この例であれば、forEachメソッドを使って、得られた結果を順に出力しています。
監修
山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。