1. ホーム
  2. java-8

[解決済み] Java 8 のストリームを Guava ImmutableCollection に収集するにはどうすればよいですか?

2023-06-26 15:24:55

質問

次のようなことをしたいのですが、どうすればよいでしょうか。

List<Integer> list = IntStream.range(0, 7).collect(Collectors.toList());

の実装ですが、結果として得られるリストがGuavaの ImmutableList .

ができるのは知っています。

List<Integer> list = IntStream.range(0, 7).collect(Collectors.toList());
List<Integer> immutableList = ImmutableList.copyOf(list);

というのがありますが、これに直接集めたいのです。試してみたところ

List<Integer> list = IntStream.range(0, 7)
    .collect(Collectors.toCollection(ImmutableList::of));

が、例外を投げました。

java.lang.UnsupportedOperationException at com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:96)

どのように解決するのですか?

この場合 toImmutableList() メソッドが含まれるようになりました。 グアバ21 として使用することができます。

ImmutableList<Integer> list = IntStream.range(0, 7)
    .boxed()
    .collect(ImmutableList.toImmutableList());

編集します。 削除された @Beta から ImmutableList.toImmutableList にある他のよく使われる API と共に リリース27.1 ( 6242bdd ).