Java8のStream APIのforEachやfillterやmapやsortedやcollectの使い方

Java8のStream APIのforEachやfillterやmapやsortedやcollectの使い方

Java8からjava.util.stream.Streamというコレクションを便利に操作するクラスができました。

forEach

今まではコレクションをループする時はfor文や拡張for文を使用していましたが、forEachを使えば簡単に記述することができるようになります。

Listのstreamを取得してforEachでループする例です。

Java8のforEach文の使い方」参照

allMatch

各要素に対して全てが条件を満たすならtrueを返し、そうでなければfalseを返します。

Listのstreamを取得してallMatchで操作する例です。

anyMatch

allMatchに対して各要素の一つでも条件を満たすならtrue、全ての要素が条件を満たさないならfalseを返します。

noneMatch

noneMatchメソッドは、全要素がfalseの場合trueとなり、一つでもtrueの場合、falseとなります。

filter

filterは中間操作です。filterはその名の通り、条件を満たす要素のみにフィルタリングします。

filterの引数に、文字列::equalsというメソッド参照なども記述することが出来ます。

メソッド参照の否定は、!"Java"::equalsとすることはできません。

Predicate.not(“Java”::equals)としてメソッド参照の否定となります。

map

mapは中間操作です。mapは各要素を別の型に変換してくれます。以下はString型の各要素をInteger型に変換している例です。

mapで変換処理をしますが、以下は2倍にする例です。

・mapToInt

・sum

オブジェクトをプリミティブ型に変換するメソッドです。以下はプリミティブ型に変換してsumメソッドで合計している例です。

distinct

各要素で重複している要素を取り除くメソッドです。

sorted

sortedは中間操作です。

各要素を昇順にソートします。

降順でソートするにはComparatorを使います。

peek

peekは中間操作です。終端操作があって初めて評価されますが、peek自体はどういう値が入っているかなどを調べたい場合に使うメソッドです。

collect

collectメソッドは色々中間操作をしたのちに最終的にコレクションを返します。

メソッド 戻り値
toList List<T>
toMap Map<K,V>
groupingBy Map<K,V>
joining String(文字列連結)
maxBy 最大値(Optional)
minBy 最小値(Optional)
toSet Set<T>

Collectors.toList

結果は以下のようになります。

Collectors.toMap

collectメソッドの引数にCollectors.toMapを指定して、Map<K,V>に変換します。

結果は以下のようになります。

Java8のCollectors.toMap()の使い方

Java8のMap Stream APIでキー変換する方法

Java8でEnumをStreamに変換する方法

Collectors.joining(引数1つ)

collectメソッドのに引数にCollectors.joining(“区切り文字”)を指定して、文字列連結します。

これはコレクションがStringの場合に限ります。

結果は以下のようになります。

Collectors.joining(引数3つ)

collectメソッドのに引数にCollectors.joining(“区切り文字”,”先頭文字”,”末尾文字”)を指定して、文字列連結します。

連結した文字列を{と}で囲み、各要素をカンマ区切りします。

Collectors.groupingBy

Collectors.groupingByメソッドを使うことによってグルーピングすることができます。

以下は文字列長が同じ文字列でグルーピングする例です。

結果は以下のようになります。List<V>をMap<K, V>に変換してくれます。

Collectors.maxBy

Collectors.maxByメソッドを使うことによって最大値を求めます。引数にComparatorを指定します。

Collectors.minBy

Collectors.minByメソッドを使うことによって最小値を求めます。引数にComparatorを指定します。

toArray

toArrayメソッドでObject[]を返します。

引数にString[]::newというように指定するとString[]配列を返します。

Java8のStreamでPOJOのフィールド名を配列にする方法

count

countメソッドでstreamの件数を返します。

summaryStatistics

summaryStatisticsメソッドでIntSummaryStatisticsのインスタンスを返します。

このクラスは計算するメソッドが用意されています。

リスト同士を結合する

Stream.concatメソッドでリスト同士を結合する

リスト同士をStream.concatメソッドでマージすることができます。

重複した結果が返ります。

flatMapメソッドでリスト同士を結合する

flatMapメソッドを使用してリストを結合することもできます。

limitで件数を絞る

limitメソッドで件数を指定します。引数はlong型なので3Lというように最後にLを付けます。

ソートされた結果を3件だけにしています。

FindAny

Java8のStream API findAnyメソッドで任意の要素を取得する

FindFirst

Java8のStream API findFirstメソッドで一番最初の要素を取得する

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA