JavaでのStream APIの使い方とは?Streamの生成・中間操作・終端操作について紹介

- システム
エンジニア - JavaのStream APIとはどのようなものなのでしょうか。
- プロジェクト
マネージャー - Javaのイテレーション用のAPIです。
JavaでのStream APIの使い方とは?
今回は、JavaでのStream APIの使い方について説明します。
Stream APIとは、イテレーション用のAPIです。
ここでは、Streamの生成・中間操作・終端操作について紹介します。
生成したStreamを操作して表示などができます。
JavaでのStream APIの使い方に興味のある方はぜひご覧ください。
生成
JavaでStreamを生成する方法を紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import java.util.stream.Stream; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) throws Exception { // java.util.stream.Stream#of Stream<string> stream1 = Stream.of(""a"", ""b"", ""c"", ""d"", ""e""); stream1.forEach((s) -> System.out.println(s)); // java.util.stream.Stream#of String[] array = {""f"", ""g"", ""h"", ""i"", ""j""}; Stream<string> stream2 = Stream.of(array); stream2.forEach((s) -> System.out.println(s)); // java.util.Arrays#stream Stream<string> stream3 = Arrays.stream(new String[]{""k"", ""l"", ""m"", ""n"", ""o""}); stream3.forEach((s) -> System.out.println(s)); // java.util.Collection#stream List<string> list = Arrays.asList(""p"", ""q"", ""r"", ""s"", ""t""); Stream<string> stream4 = list.stream(); stream4.forEach((s) -> System.out.println(s)); } } </string></string></string></string></string> |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
a b c d e f g h i j k l m n o p q r s t |
中間操作
JavaのStreamの中間操作について紹介します。
生成したStreamを操作できます。ここでは、filter/skip/limit/mapについて紹介します。
filter
JavaのStreamの中間操作メソッドである、filterメソッドについて紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.stream.Stream; public class Main { public static void main(String[] args) throws Exception { Stream<string> stream1 = Stream.of(""a"", ""bb"", ""ac"", ""d"", ""e""); // lengthでfilter stream1.filter(s -> s.length() == 1).forEach((s) -> System.out.println(s)); System.out.println(""----------------------""); Stream<string> stream2 = Stream.of(""a"", ""bb"", ""ac"", ""d"", ""e""); // endsWithでfilter stream2.filter(s -> s.endsWith(""e"")).forEach((s) -> System.out.println(s)); } } </string></string> |
実行結果は以下のようになります。
1 2 3 4 5 |
a d e ---------------------- e |
skip/limit
JavaのStreamの中間操作メソッドである、skip/limitメソッドについて紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.stream.Stream; public class Main { public static void main(String[] args) throws Exception { Stream<string> stream1 = Stream.of(""a"", ""b"", ""c"", ""d"", ""e""); // 2番目から3個 stream1.skip(2).limit(3).forEach((s) -> System.out.println(s)); System.out.println(""----------------------""); Stream<string> stream2 = Stream.of(""a"", ""b"", ""c"", ""d"", ""e""); // 2番目から3番目まで stream2.limit(3).skip(2).forEach((s) -> System.out.println(s)); } } </string></string> |
実行結果は以下のようになります。
1 2 3 4 5 |
c d e ---------------------- c |
map
JavaのStreamの中間操作メソッドである、mapメソッドについて紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.stream.Stream; public class Main { public static void main(String[] args) throws Exception { Stream<string> stream1 = Stream.of(""a"", ""b"", ""c"", ""d"", ""e""); // mapで変換 stream1.map(i -> ""要素は"" + i + ""です"").forEach((s) -> System.out.println(s)); System.out.println(""----------------------""); Stream<string> stream2 = Stream.of(""a"", ""b"", ""c"", ""d"", ""e""); // mapで変換 stream2.map(i -> i + i).forEach((s) -> System.out.println(s)); } } </string></string> |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 |
要素はaです 要素はbです 要素はcです 要素はdです 要素はeです ---------------------- aa bb cc dd ee |
終端処理
JavaのStreamの終端操作について紹介します。
生成したStreamを表示したり集計したりできます。
上記で紹介したforEachも終端処理です。
ここでは、collect/count/max/min/average/sumについて紹介します。
collect
JavaのStreamの終端操作メソッドである、collectメソッドについて紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.stream.Stream; import java.util.stream.Collectors; import java.util.List; public class Main { public static void main(String[] args) throws Exception { Stream<string> stream1 = Stream.of(""a"", ""bb"", ""ac"", ""d"", ""e""); // Stream の結果をコレクションに変換 List<string> result = stream1.filter(s -> s.length() == 1).collect(Collectors.toList()); System.out.println(result); } } </string></string> |
実行結果は以下のようになります。
1 |
[a, d, e] |
count/max/min/average/sum
JavaのStreamの終端操作メソッドである、count/max/min/average/sumメソッドについて紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.stream.IntStream; public class Main { public static void main(String[] args) throws Exception { // count System.out.println(""count:"" + IntStream.of(1, 2, 3, 4, 5).count()); // max System.out.println(""max:"" + IntStream.of(1, 2, 3, 4, 5).max().getAsInt()); // min System.out.println(""min:"" + IntStream.of(1, 2, 3, 4, 5).min().getAsInt()); // average System.out.println(""average:"" + IntStream.of(1, 2, 3, 4, 5).average().getAsDouble()); // sum System.out.println(""sum:"" + IntStream.of(1, 2, 3, 4, 5).sum()); } } |
実行結果は以下のようになります。
1 2 3 4 5 |
count:5 max:5 min:1 average:3.0 sum:15 |
- システム
エンジニア - JavaでのStream APIの使い方についてよく理解できました。
- プロジェクト
マネージャー - Stream APIの使い方をより理解するために、ソースコードを書いてみましょう。
まとめ
いかがでしたでしょうか。JavaでのStream APIの使い方について説明しました。
ここでは、Streamの生成・中間操作・終端操作について紹介します。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)