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でループする例です。

・allMatch

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

Listのstreamを取得してallMatchで走査する例です。

・anyMatch

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

・filter

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

・map

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

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

・mapToInt

・sum

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

・distinct

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

・sorted

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

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

・peek

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

・collect

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

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

Collectors.joining

collectメソッドのに引数にCollectors.joining(“区切り文字”)を指定することで、文字列連結することができます。

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

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

Collectors.groupingBy

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

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

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

forEach外にある変数をforEach内で参照する

forEachの外にある変数をforEach内で使用することはできません。

以下のように配列にしてあげると参照できるのですが良いコーディングではないと思います。

finalで定数にするとforEach内で参照することが可能になりますのでそちらの使い方の方が良いかもしれません。

Stream.concatメソッドでリスト同士をマージする

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

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

limitで件数を絞る

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

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

forEachで引数を複数指定する

ListのListのstreamだとforEach((k,v) -> ~というように複数指定することができます。

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

コメントをどうぞ

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

CAPTCHA