Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Java辞典

  1. トップページ
  2. Java辞典
  3. ストリーム.collect() / toList()

ストリーム.collect() / toList()

ストリームの終端操作のひとつで、ストリームの要素をコレクションなどに収集します(Java 8+)。『collect()』に Collectors クラスのメソッドを渡してリスト・セット・マップに変換できます。Java 16以降は『toList()』をストリームから直接呼び出せます。

構文
// ストリームをリストに収集します。
ストリーム.collect(Collectors.toList());

// ストリームをセットに収集します。
ストリーム.collect(Collectors.toSet());

// ストリームをマップに収集します。
ストリーム.collect(Collectors.toMap(キー取得関数, 値取得関数));

// ストリームを変更不可リストに収集します(Java 16+)。
ストリーム.toList();
メソッド一覧
メソッド概要
collect(Collector)ストリームの要素を指定した形式のコレクションに収集する終端操作です。
Collectors.toList()ストリームの要素を ArrayList に収集します(変更可能)。
Collectors.toSet()ストリームの要素を HashSet に収集します(重複は除去されます)。
Collectors.toMap(k, v)キー取得関数と値取得関数を指定して HashMap に収集します。
toList()ストリームを変更不可リストに収集します(Java 16+)。collect(Collectors.toUnmodifiableList()) と同等です。
サンプルコード
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

List<String> fruits = Arrays.asList("apple", "banana", "cherry", "avocado");

// 'a' で始まる要素をリストに収集します。
List<String> aFruits = fruits.stream()
    .filter(f -> f.startsWith("a"))
    .collect(Collectors.toList());
System.out.println(aFruits); // 『[apple, avocado]』と出力されます。

// 全要素をセットに収集します(重複は除去されます)。
List<Integer> nums = Arrays.asList(1, 2, 2, 3, 3, 3);
Set<Integer> uniqueNums = nums.stream()
    .collect(Collectors.toSet());
System.out.println(uniqueNums.size()); // 『3』と出力されます。

// 文字列をキー、文字数を値とするマップに収集します。
Map<String, Integer> lengthMap = fruits.stream()
    .collect(Collectors.toMap(f -> f, String::length));
System.out.println(lengthMap.get("apple")); // 『5』と出力されます。

// Java 16+ の toList() を使用します(変更不可リスト)。
List<String> upperList = fruits.stream()
    .map(String::toUpperCase)
    .toList(); // Java 16+
System.out.println(upperList); // 『[APPLE, BANANA, CHERRY, AVOCADO]』と出力されます。
概要

『collect()』はストリームの終端操作のうち最も汎用的なもので、Collectors クラスが提供するコレクターを組み合わせることでさまざまな形式に変換できます。

Java 16以降の『toList()』はシンプルに書けますが、返されるリストは変更不可(add() などを呼ぶと UnsupportedOperationException がスローされます)なので注意してください。変更可能なリストが必要な場合は Collectors.toList() を使用してください。

ストリームの生成・絞り込み・変換については『stream() / filter() / map()』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。