以下の記事はQiita@xrdnkさんが記述した「Stream API 入門」の紹介記事です。

Stream API とは

こちらの記事の続きみたいなものです.

Stream API はDataをPipeLine形式で処理するためのAPIです.
Collection,配列,ファイルなどデータの集合体(Data Source)から,個々の要素を取り出して
これを「処理の流れ」(Stream)に引き渡すための仕組みを提供します.

Streamに対して関数操作を行った結果をStreamで返す「中間操作」と
処理結果をDataとして返す「終端操作」があります.

中間操作も終端操作もメソッド引数は関数型インターフェースを取るものが多いため,
ここでラムダ式の知識が利用していくとスマートということになります.

Stream…?I/O Streamとは違う?

Javaにはjava.ioパッケージにI/O Streamが提供されていますが,
こちらのStreamの意味は入出力をStreamになぞらえた概念ですが,
Stream APIのStreamはDataのPipeLine処理をStreamに見立てた概念です.

Stream API の基本

import java.util.ArrayList;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {

        // ①Data Sourceを準備する
        var list = new ArrayList<String>(
                Arrays.asList("tokyo", "nagoya", "osaka", "fukuoka", "hokkaido", "okinawa"));

        // ②ストリームを作る
        list.stream().
            filter(s -> s.length() > 5).         // ③中間処理を行う
            map(String::toUpperCase).
            forEach(System.out::println);        // ④終端処理を行う

        // 結果:NAGOYA FUKUOKA HOKKAIDO OKINAWA
    }
}

Stream APIの処理は以下で構成されます.
①Data Source準備する→②Stream生成→③抽出/加工などの中間処理→④出力/集計などの終端処理

上の例でいえば,
①まずArrayListのData Sourceを作る

②Streamを生成する.ここではArrayListをもとにしているため,
 Streamメソッドも,Streamオブジェクトを返します.

※与えられるData Sourceの型によって型引数は変動することと,
 Streamの途中で値が加工されることで,型が変化していく場合もある.

③filterメソッドで「文字数が5より大きい値だけを取り出す」
 mapメソッドで「大文字に変換する」
 中間処理は複数あってもよし.省略してもよし.

④forEachメソッドで,得られた値をSystem.out::printlnメソッドで出力
 終端処理は省略できません.

中間処理の戻り値はいずれもStreamです.
Stream APIでは,Streamの生成から中間処理/終端処理までを「.」演算子で
ひとまとめに連結でき,スマートな記述ができます.
(メソッドの連鎖という意味でメソッドチェーンと呼ばれる)

Streamの一連の処理が実行されるのは,終端処理のタイミングです.
中間で抽出/加工などの演算が呼び出されていても,それは一旦ストックされて,
その場では実行されず,終端処理まで処理の実施を待ちます.これを遅延処理といいます.

Stream の作り方









Related posts:

【ニュース】逢いたいのに逢えない 今 だからECサイト『地場めし』で"リモート父の日"
【ニュース】世界70ヶ国以上・累計10万人が利用するチャット英会話アプリ「Eigooo!」がさらに学びやすくバージョンアップ
【ニュース】農機具シェアリングプラットフォーム「AGRICOM」を提供開始
【ニュース】「オンライン海外旅行」にビデオ通話機能が追加!依頼からサービス提供までのワンストップ化を実現
【コラム】テレワークでも生産性を落とさない営業プロセスの在り方とは?
【コラム】テレワークを実現しにくかった業種にも対応できる――、レノボがテレワーク環境構築の実績とノウハウをアピール
【コラム】テレワークの課題にみる「次なるビジネスチャンス」
【コラム】「キャリアパスと評価制度を刷新」Gunosyエンジニア組織が取り組む改革の裏側を聞いてみた
【コラム】コードを書かない系エンジニア(プリセールスエンジニア)の仕事と価値
【Column】24 Programming Languages That Pay Top Salaries: Scala and More
【Kotlin】MockKはKotlin独自の言語仕様をほぼ網羅しているモックライブラリ
【ニュース】営業自粛でキャンセルになった大量の洋服を救いたい!洋服好きによる、洋服好きのための、洋服を救う期間限定プロジェクト「SAVE THE CLOTHES PROJECT」。
【ニュース】日本初!医療・介護・福祉 複業家レンタルサービス 「じぶんはけん」
【ニュース】リラクゼーション業界のトレンドも店舗型から宅配型へ。リラクゼーションマッチングアプリ「HOGUGU(ホググ)」が東京進出に向けてビジネスを加速。
【ニュース】モイ、アバターで通話を楽しむ音声SNS「パルミン」をリリース
【ニュース】オンライン次代のウェディング新サービス 『Web結婚式』登場!
【ニュース】ホテルに住める定額プラン、利用会員募集スタート〜ANA提携路線も7月より大幅増便〜
【ニュース】プログラミングしないエンジニアが急増中! 日本初のNoCode専門サロン「NoCodeCamp」募集開始
【ニュース】日本で活躍する外国人エンジニア向けコミュニティ”CodeGate”発足のお知らせ
【ニュース】STEM教育に最適!直感的に組み立てるだけで200種類以上のアクションが楽しめるプログラミングロボット「Clicbot」
【特集記事】ITエンジニアに必要な基礎スキル6つ|おすすめの勉強法を紹介!
【ニュース】無料のプログラミング学習プラットフォーム「LINE entry」、ゲーム感覚でプログラミングを学べる「ミッション」をリリース
【Kotlin】Unit Testing Firebase with Kotlin
【Analytics】Native Analytics on Apache Cassandra with Knowi: Tutorial
【Column】99% of Successful Software Engineers Practice These 10 Habits and Skills
【Swift】7 Awesome Open Source SwiftUI Projects to Inspire You (Part 2)
【Swift】7 Awesome Open Source SwiftUI Projects To Inspire You
【機械学習】Machine Learning: Google Colab- Why, When and How to Use it
【Column】The Future of Code Is in Your Browser
【Firebase】Top 3 open-source Firebase alternatives for 2020