LoginSignup
0
0

More than 1 year has passed since last update.

Streamとは

Posted at
  • 値の集合に対する処理を使い回す仕組みが「Stream」らしいです。

SampleCode
projava/StreamSample2.java

package projava;

import java.util.List;

public class StreamSample2 {
    public static void main(String[] args) {
        var data = List.of("yamamoto", "kis", "sugiyama");

        var result = 0;
        for (var s : data){
            if (s.length() >= 5){
                result++;
            }
        }
        System.out.println(result);
    }
}

こちらはListから5文字以上の文字列を抜き出して、新しいListを作る処理です。
実行結果として、「yamamoto」「sugoyama」が5文字以上なので「2」が表示されます。

コードでは、個数を数えるための変数resultを用意し、0を入れ、

var result = 0;

ループの中で条件を満たした文字列があった場合、値を1増やします。

result++;

こちらをStreamを使った処理に変換します。
(IntelliJ IDEAの機能を使い置換しています。)

var result = (int) data.stream()        //Streamソース
        .filter(s -> s.length() >= 5)   //中間処理
        .count();                       //終端処理
    System.out.println(result);

「var result = 0;」から「System.out.println(result);」までがStreamへと置き換わっています。

Streamの処理は、
値の集合からStreamを取り出す「Streamソース」、
値を操作する「中間処理」、
値をまとめる「終端処理」
の3つに分かれます。

ここではListからStreamソースを取り出して、中間処理として5文字以上の文字列を処理する様フィルターし、
最後に終端処理として個数を数えています。

Steram処理は基本的にメゾッドの呼び出しを続けて書く「メゾッドチェーン」の形で書きます。
Javaでは「;」までが1行とみなされ、改行はスペースと同じ扱いなので「.」から始まるよう改行する書き方がよく使われるそうです。

SteramソースはStreamの取り出し口となります。
ListからStreamを取り出すときにはstreamメゾッドを使います。

var result = data.stream()

Streamに流れる値を変換したり、取り捨て選択するのが中間処理です。
中間処理の様に、Streamではラムダ式が多く使われます。

.filter(s -> s.length() >= 5)

ラムダ式は以下の様な形式となります。

受け取った値を使うための変数  -> 処理

Streamでの処理から最終的な結果を取り出すのが終端処理です。

.count();
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0