web-dev-qa-db-ja.com

1要素の配列リストを素早く簡単に作成する方法

これを1行でできるユーティリティメソッドはどこかにありますか? CollectionsListのどこにも見つかりません。

public List<String> stringToOneElementList(String s) {
    List<String> list = new ArrayList<String>();
    list.add(s);
    return list;
}

私はそれに空想の縁を置くことを計画しない限り私は車輪を再発明したくない。

さて...型はTではなくStringでも構いません。しかし、あなたはポイントを得ます。 (すべてのnullチェック、安全性チェックなどで)

264
David T.

固定サイズList

私が知っている最も簡単な方法は、 Arrays.asList(T...) のように固定サイズの単一要素Listを作成することです。

// Returns a List backed by a varargs T.
return Arrays.asList(s);

可変サイズList

サイズが異なる場合は、 ArrayList とfixed-sizeListのように構築できます。

return new ArrayList<String>(Arrays.asList(s));

(Java 7以降)、 菱形演算子<> を使用して作成できます。

return new ArrayList<>(Arrays.asList(s));
359
Elliott Frisch
Collections.singletonList(object)

このメソッドによって作成されたリストは不変です。

306
Andy J

ユーティリティメソッドArrays.asListを使って、その結果を新しいArrayListに送ることができます。

List<String> list = new ArrayList<String>(Arrays.asList(s));

別のオプション:

List<String> list = new ArrayList<String>(Collections.nCopies(1, s));

そして

List<String> list = new ArrayList<String>(Collections.singletonList(s));

Java 7+では、new ArrayList<String>(...)new ArrayList<>(...)に置き換えて、 "diamond operator"を使うことができます。

Java 9

Java 9以降を使用している場合は、 List.ofメソッド :を使用できます。

List<String> list = new ArrayList<>(List.of(s));

上記の各オプションの使用方法にかかわらず、リストを変更可能にする必要がない場合は、new ArrayList<>()ラッパーを使用しないことを選択できます。

64
rgettman

Java 8 Streamsの場合

Stream.of(object).collect(Collectors.toList())

またはあなたがセットが必要な場合:

Stream.of(object).collect(Collectors.toSet())
27
Marko Jurisic

他の答えはすべてArrays.asList()を使用します。これは変更不可能なリストを返します(要素を追加または削除しようとするとUnsupportedOperationExceptionがスローされます)。可変リストを取得するには、いくつかの答えが示すように、返されたリストを新しいArrayListでラップできますが、より明確な解決策は Guava'sLists.newArrayList() (available)少なくとも Guava 10 以降、2011年にリリースされました)。

例えば:

Lists.newArrayList("Blargle!");
14
user167019

非常に簡単に:

Arrays.asList("Hi!")
11
SLaks

Guavaが言及するにつれて、 Eclipse Collections (以前はGS Collectionsと呼ばれていました)も提案すると思いました。

以下の例はすべて、単一の項目を持つListを返します。

Lists.mutable.of("Just one item");
Lists.mutable.with("Or use with");
Lists.immutable.of("Maybe it must be immutable?");
Lists.immutable.with("And use with if you want");

他のコレクションにも同様の方法があります。

4
vegemite4me

さらに別の選択肢は、 二重ブレース初期化 である。

new ArrayList<String>() {{ add(s); }};

しかし それは非効率的であいまいです 。そのためにのみ適しています:

  • ほとんどの単体テストやその他の短期間のプログラムなど、メモリリークを気にしないコードで。
  • 他の解決策が適用されない場合は、問題のArrayListとは異なる種類のコンテナーを作成するために、ここまでずっとスクロールしたことになります。
1
Stein