これを1行でできるユーティリティメソッドはどこかにありますか? Collections
やList
のどこにも見つかりません。
public List<String> stringToOneElementList(String s) {
List<String> list = new ArrayList<String>();
list.add(s);
return list;
}
私はそれに空想の縁を置くことを計画しない限り私は車輪を再発明したくない。
さて...型はT
ではなくString
でも構いません。しかし、あなたはポイントを得ます。 (すべてのnullチェック、安全性チェックなどで)
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));
Collections.singletonList(object)
このメソッドによって作成されたリストは不変です。
ユーティリティメソッド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));
ArrayList(Collection)
コンストラクタ。Arrays.asList
メソッド。Collections.nCopies
メソッド。Collections.singletonList
メソッド。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<>()
ラッパーを使用しないことを選択できます。
Java 8 Streamsの場合
Stream.of(object).collect(Collectors.toList())
またはあなたがセットが必要な場合:
Stream.of(object).collect(Collectors.toSet())
他の答えはすべてArrays.asList()
を使用します。これは変更不可能なリストを返します(要素を追加または削除しようとするとUnsupportedOperationException
がスローされます)。可変リストを取得するには、いくつかの答えが示すように、返されたリストを新しいArrayList
でラップできますが、より明確な解決策は Guava'sLists.newArrayList() (available)少なくとも Guava 10 以降、2011年にリリースされました)。
例えば:
Lists.newArrayList("Blargle!");
非常に簡単に:
Arrays.asList("Hi!")
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");
他のコレクションにも同様の方法があります。
さらに別の選択肢は、 二重ブレース初期化 である。
new ArrayList<String>() {{ add(s); }};
しかし それは非効率的であいまいです 。そのためにのみ適しています: