モジュール 7 · レッスン 2 / 2コース内の 14/14~15 min
モジュールのレッスン (2/2)
ストリームAPI
Java の Stream API を使用すると、関数型プログラミングを利用して、宣言的な方法でオブジェクトのコレクションを処理できます。ストリームはデータを保存しませんが、代わりに操作のパイプラインを通じてソース (リストや配列など) から要素を運びます。
Stream パイプラインは 3 つの部分で構成されます。
- ソース (例:
list.stream()) - 0 個以上の 中間操作 (新しいストリームを返す、例:
filter、map) - 端末操作 (最終結果または副作用を生成し、ストリームを閉じます。例:
collect、forEach、reduce)
一般的な中間操作
中間操作は遅延的であり、最終操作が呼び出されるまで実行されません。
filter(Predicate): ブール条件に基づいて要素をフィルターします。map(Function): 関数を適用して各要素を別のオブジェクトに変換します。sorted(): ストリームの要素を並べ替えます。
Java
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
.filter(name -> name.startsWith("M"))
.map(name -> name.toUpperCase())
.collect(Collectors.toList()); // "MARCO"共通の端末操作
forEach(Consumer): ストリームの各要素に対してアクションを実行します。collect(Collector): ストリームの結果をコンテナー (Collectors.toList()を使用したリストなど) に収集します。reduce(identity, BinaryOperator): Stream 要素を単一の累積値に結合します。
Java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b); // Sums all numbers: 10自分で試してみてください
運動#java.m7.l2.e1
試行回数: 0読み込み中…
数値ストリームを使用して偶数のみをフィルターし、それらを Evens という名前の新しいリストに収集し、System.out.println を使用して出力するコードを完成させます。
エディターを読み込み中…
ヒントを表示
まず `numbers.stream()` を呼び出し、`.filter(n -> n % 2 == 0)` を追加し、最後に `.collect(Collectors.toList())` で収集します。
3 回の試行後に解決策が利用可能になります
運動#java.m7.l2.e2
試行回数: 0読み込み中…
ストリームを使用して、map を使用して名前リスト内のすべての名前を大文字に変換し、メソッド参照を指定した forEach を使用して 1 つずつ出力します。
エディターを読み込み中…
ヒントを表示
`.map(s -> s.toUpperCase())` の後に端末操作 `.forEach(System.out::println)` を使用します。
3 回の試行後に解決策が利用可能になります
運動#java.m7.l2.e3
試行回数: 0読み込み中…
Stream と初期値 0 でのリデュース端末操作を使用して、数値リスト内のすべての数値の合計を計算して、コードを完成させます。合計を出力します。
エディターを読み込み中…
ヒントを表示
`numbers.stream().reduce(0, (a, b) -> a + b)` を使用し、結果の変数を出力します。
3 回の試行後に解決策が利用可能になります