StreamAPIのおさらい - java.util.stream.Stream
JavaSE8で導入されたStreamAPIを使用してできる処理のうち、java.util.stream.Streamクラスの機能を利用してできる処理を書いてみた。
【やること】
・java.util.stream.Stream系クラスのメソッドを使ってできる処理をさらう。
・Java Streamメモ(Hishidama's Java8 Stream Memo) で紹介されているメソッド+αを書いてみる。
【環境】
●Java
・jdk1.8.0_25
●IDE
・Eclipse Luna SR1 (4.4.1)
【資産】
具体的な使い方はソースを参照。
1.Stream内の単一の値に対する順次処理
(1)Stream#map・・・Streamの要素を取り出して変換を行う
(2)Stream#mapToDouble・・・Streamの要素を取り出してdoubleへの変換を行う
(3)Stream#mapToInt・・・Streamの要素を取り出してintへの変換を行う
(4)Stream#mapToLong・・・Streamの要素を取り出してlongへの変換を行う
(5)Stream#floatMap・・・Streamの要素を取り出してStreamへの変換を行う
(6)Stream#flatMapToDouble・・・Streamの要素を取り出してDoubleStreamへの変換を行う
(7)Stream#flatMapToInt・・・Streamの要素を取り出してIntStreamへの変換を行う
(8)Stream#flatMapToLong・・・Streamの要素を取り出してLongStreamへの変換を行う
(9)Stream#forEach・・・Stream内各要素に対して処理を適用する(※処理順の指定なし)
(10)Stream#forEachOrdered・・・Stream内各要素に対して処理を適用する(※処理順の指定あり)
StreamSample/OperateSingleElementStreams.java at master · hhhhhskw/StreamSample · GitHub
2.Streamの内の複数の値に対する順次処理
(1)Stream#reduce・・・Stream内の複数の要素を取り出して処理を行い、単一の結果(戻り値は入力値による)として出力する
(2)Stream#collect・・・Stream内の複数の要素を取り出して処理を行い、コレクション(CollectionやStringBuilderなど)として出力する
(3)Stream#concat・・・Stream同士の連結を行う
StreamSample/OpetrateMultiElementStreams.java at master · hhhhhskw/StreamSample · GitHub
3.Stream内の値に対するソート処理
(1)Stream#sort・・・Streamに含まれる値をソートする
StreamSample/SortStreams.java at master · hhhhhskw/StreamSample · GitHub
4.Stream内の値に対するフィルタリング処理
(1)Stream#filter・・・Streamに含まれる値のフィルタリング
(2)Stream#min・・・Streamに含まれる値のうち、最小値を返却する
(3)Stream#max・・・Streamに含まれる値のうち、最大値を返却する
(4)Stream#count・・・Streamに含まれる要素の数を返却する
(5)Stream#anyMatch・・・Streamに含まれる要素に対して、条件検索(条件に1要素でも合致すればtrue)を行う
(6)Stream#allMatch・・・Streamに含まれる要素に対して、条件検索(条件に完全に一致する場合はtrue)を行う
(7)Stream#noneMatch・・・Streamに含まれる要素に対して、条件検索(条件一致する値がなけれはtrue)を行う
(8)Stream#findFirst・・・Streamに含まれる要素の先頭の値を返却する
(9)Stream#findAny・・・Streamに含まれる要素のいずれかの値を返却する(※並列処理用)
(10)Stream#distinct・・・Streamに含まれる値の重複を排除する
StreamSample/FilteringStreams.java at master · hhhhhskw/StreamSample · GitHub
5.Streamに対する各種操作
(1)Stream#limit・・・Streamに含まれる値の個数を制限(limit)し、Streamを返却する
(2)Stream#skip・・・Streamに含まれる値の開始位置を変更(skip)し、Streamを返却する
StreamSample/OperateStreams.java at master · hhhhhskw/StreamSample · GitHub
6.Streamを生成する
(1)Stream#of・・・指定された値を含むStreamを返却する。
(2)Stream#empty・・・空のStreamを返却する
(3)Stream#generate・・・第一引数で渡された要素を含むStreamを返却する
(4)Stream#iterate・・・第一引数で渡された初期要素に対し、第二引数で指定されたを関数を適用した要素の集合を含むStreamを返却する
StreamSample/CreateStreams.java at master · hhhhhskw/StreamSample · GitHub
7.Streamの形式変更操作
(1)Stream#toArray・・・Straemを配列に変換する ※終端操作
(2)Stream#builder・・・Streamのbuilderを取得する
StreamSample/ChangeTypeStream.java at master · hhhhhskw/StreamSample · GitHub
8.中間処理全体に対する各種操作
(1)Stream#peek・・・Streamに含まれる値に対する操作中に副作用を含む処理を行う。
StreamSample/DebugStream.java at master · hhhhhskw/StreamSample · GitHub
【参考文献・URL】
Stream (Java Platform SE 8)
DoubleStream (Java Platform SE 8)
IntStream (Java Platform SE 8)
Stream.Builder (Java Platform SE 8)
StreamAPIについて調べてみた flatMap編 その1 - シュンツのつまづき日記
ラムダ式・Stream APIの理解のポイントは「型」 - Java EE 事始め!
Java Advent Calendar 2013 5日目 - Java 8 Stream APIを学ぶ - kagamihogeの日記
Javaによる関数型プログラミング ―Java 8ラムダ式とStream
- 作者: Venkat Subramaniam,株式会社プログラミングシステム社
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/10/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る