Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9のStream APIでcollect()メソッドを使う方法【サンプルコード付き】

JavaのStream APIにおけるcollect()メソッドは、ストリーム内のすべての要素を収集し、指定したコレクション型に格納するための終端操作です。結果をどのようなコレクションに格納するかは、開発者が明示的に指定する必要があります。収集先の種類や変換方法はCollectorsクラスで定義されており、実際の開発ではCollectors.toList()Collectors.toSet()Collectors.toMap()が特によく使われます。

構文

<R, A> R collect(Collector<? super T, A, R> collector)

型パラメータの意味は次のとおりです。

  • T:ストリームの要素型
  • A:中間的な蓄積に使われる可変コンテナの型
  • R:最終的に返される結果の型

使用例

次の例では、Java 9で新たに追加されたtakeWhile()dropWhile()、そして述語を受け取るStream.iterate()と組み合わせて、collect()メソッドを利用しています。

import java.util.*;
import java.util.stream.*;

public class StreamCollectMethodTest {
    public static void main(String args[]) {
        List<String> list = List.of("a", "b", "c", "d", "e", "f", "g", "h", "i");

        // "e"が出現する直前までの要素を取得
        List<String> subset1 = list.stream()
                                   .takeWhile(s -> !s.equals("e"))
                                   .collect(Collectors.toList());
        System.out.println(subset1);

        // "e"以降の要素を取得
        List<String> subset2 = list.stream()
                                   .dropWhile(s -> !s.equals("e"))
                                   .collect(Collectors.toList());
        System.out.println(subset2);

        // 1から10までの数値ストリームを生成してリスト化
        List<Integer> numbers = Stream.iterate(1, i -> i <= 10, i -> i + 1)
                                      .collect(Collectors.toList());
        System.out.println(numbers);
    }
}

実行結果

[a, b, c, d]
[e, f, g, h, i]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ポイントまとめ

  • collect()はストリームの終端操作であり、要素をList・Set・Mapなどの可変コンテナへ変換できる。
  • Collectors.toList()はListへ、Collectors.toSet()はSetへ、Collectors.toMap()はMapへ要素を収集する。
  • Java 9のtakeWhile()/dropWhile()と組み合わせれば、条件に基づく部分ストリームを簡潔にコレクション化できる。
  1. Javaのpack()メソッドとは?使い方とsetSize()との違いを解説

    pack()メソッドは、JavaのWindowクラスで定義されているメソッドで、フレーム内のすべてのコンポーネントがそれぞれの推奨サイズ(preferred size)以上で表示されるように、ウィンドウのサイズを自動的に調整します。 代替手段として、setSize()メソッドやsetBounds()メソッドを呼び出して、フレームのサイズを明示的に指定する方法もあります。しかし一般的には、pack()メソッドを使用する方がsetSize()よりも推奨されています。その理由は、pack()がフレームのサイズ決定をレイアウトマネージャーに委ねることができ、レイアウトマネージャーはプラットフォーム間の

  2. JavaのSwingUtilities.invokeLater()メソッドの使い方を徹底解説

    invokeLater()メソッドとはinvokeLater()メソッドは、SwingUtilitiesクラスが提供するstaticメソッドの一つで、AWTイベントディスパッチスレッド(Event Dispatch Thread)上でタスクを非同期に実行するために使用されます。このメソッドはSwingUtilities.invokeAndWait()とよく似た動作をしますが、大きな違いは、処理のリクエストをイベントキューに登録した後、すぐに呼び出し元へ制御を返すという点です。つまり、invokeLater()は引数で渡されたRunnableオブジェクト内のコードブロックの実行完了を待ちません。