LoginSignup
0
0

StreamAPI

Last updated at Posted at 2024-04-29

■StreamAPIのお約束

・streamAPIはCollectionインターフェースで定義されているメソッドの一種。
・下記の3部構成になっている。
①Streamを作成
②中間処理(なくてもいい)
③終端処理(1度だけ必ず行う)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Lesson {
    public static void main(String[] args) {
        List<String> fruits = new ArrayList<>(Arrays.asList("Apple", "Banana", "Cherry"));

        fruits.stream()//1.streamの【生成】
            .map(n -> n + "Cake") // 2. 各要素に "Cake" を結合【中間操作1】
            .filter(n -> n.length() >= 10)// 3. 文字列の長さが10文字以上のものを抽出【中間操作2】
            .forEach(n -> System.out.println(n));// 4. 抽出された要素を出力【終端操作※1度だけ必ず行う】
    }
}

■Streamの構成について

①stream生成

処理したいリストにドットで繋げて.stream()と書く。

fruits.stream()

②中間処理

リストに対して処理したいメソッドを記述。

.map(n -> n + "Cake") 
.filter(n -> n.length() >= 10)

中間処理で使う、代表的なメソッドいろいろ

▼map:変換
-> を挟んで左辺の引数の値を、右辺の値に変換して返す。
要素の変数の名前はnや、分かりやすい名前。(この例で言うとfruitとか)
変換したい値は計算式を入れたり、大文字変換のtoUpperCase()をかけたり。

.map(リスト内の要素を表す変数n -> nに対して変換したい値)

▼filter:条件による抽出
左辺の引数の値に対して、右辺の条件式がtrueとなるものを抽出する。

.filter(リスト内の要素を表す変数n -> nに対する条件)

▼distinct:重複削除
Stream内の要素の中で重複が無い状態にする。すべてユニークな要素。

.distinct()

▼limit:先頭から指定範囲を抽出
long型の引数に指定した数だけ、先頭から取り出す。(※0は数えず見たまんまの数を抽出。)

.limit(取り出したい要素数)

▼sorted:昇順ソート
昇順に並べ替える。引数は持たない。
sorted(Comparator.naturalOrder())と意味は同じ。

.sorted() 

③終端処理

中間操作が0~複数個あったのに対し、終端操作は最後に1度だけ必ず行う。
例で使ったのは ▼forEach:要素を一つづつ取得し、各要素に対して処理する
ArrayListなどでも使うあのForEach文と全く同じ。

.forEach(n -> System.out.println(n));

その他の終端処理

▼collect(Collectors.toList())
streamの処理後の要素のリストを返す終端処理。

.collect(Collectors.toList()); 
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