文字列のリストと文字列の配列、つまり「s1」、「s2」、「s3」の文字列要素を含むリスト/配列を初期化する最短の方法(コード内)を探しています。
さまざまなオプションがあります。個人的には Guava を使用するのが好きです:
List<String> strings = Lists.newArrayList("s1", "s2", "s3");
(グアバはとにかく持っておく価値のあるライブラリです:)
JDKのみを使用すると、次を使用できます。
List<String> strings = Arrays.asList("s1", "s2", "s3");
これはArrayList
を返しますが、それはnot通常のJava.util.ArrayList
-可変ですが固定サイズの内部的なものです。
個人的には、何が起こっているか(返されるリスト実装)を明確にするため、Guavaバージョンを好みます。また、stillメソッドを静的にインポートした場合に何が起こっているかを明確にします。
// import static com.google.common.collect.Lists.newArrayList;
List<String> strings = newArrayList("s1", "s2", "s3");
...一方、asList
を静的にインポートすると、少し奇妙に見えます。
変更可能な任意のリストが必要ない場合の別のグアバオプション:
ImmutableList<String> strings = ImmutableList.of("s1", "s2", "s3");
私は通常、either完全に変更可能なリストを持っています(その場合はLists.newArrayList
が最適)または完全に不変のリスト(この場合ImmutableList.of
最高です)。私が本当にwant可変だが固定サイズのリストを望むことはまれです。
Java 9では、便利なメソッド List.of
次のように使用します。
List<String> l = List.of("s1", "s2", "s3");
いくつかの選択肢があります:
// Short, but the resulting list is fixed size.
List<String> list1 = Arrays.asList("s1", "s2", "s3");
// Similar to above, but the resulting list can grow.
List<String> list2 = new ArrayList<>(Arrays.asList("s1", "s2", "s3"));
// Using initialization block. Useful if you need to "compute" the strings.
List<String> list3 = new ArrayList<String>() {{
add("s1");
add("s2");
add("s3");
}};
配列に関しては、宣言の時点で次のように初期化できます。
String[] arr = { "s1", "s2", "s3" };
再初期化するか、変数に保存せずに作成する必要がある場合は、
new String[] { "s1", "s2", "s3" }
ただし、文字列定数がそうであれば、次のようになります
String[] arr = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10",
"s11", "s12", "s13" };
これらの中で私は通常書くことを好みます
String[] arr = "s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13".split(",");
List<String> stringList = Arrays.asList("s1", "s2", "s3");
これらのオブジェクトはすべてJDKに存在します。
PS:aioobe のように、これによりリストのサイズが固定されます。
標準のJava API: http://download.Oracle.com/javase/6/docs/api/Java/でArrays
クラスを使用できます。 util/Arrays.html#asList(T ...)
List<String> strings = Arrays.asList("s1", "s2", "s3");
結果のリストは固定サイズであることに注意してください(追加することはできません)。
JDK2
List<String> list = Arrays.asList("one", "two", "three");
JDK7
//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
JDK8
List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());
JDK9
List<String> list = List.of("one", "two", "three");
さらに、Guavaのような他のライブラリによって提供される他の多くの方法があります。
Eclipse Collections を使用すると、次のように記述できます。
List<String> list = Lists.mutable.with("s1", "s2", "s3");
また、タイプと、それらがミュータブルかイミュータブルかについて、より具体的にすることもできます。
MutableList<String> mList = Lists.mutable.with("s1", "s2", "s3");
ImmutableList<String> iList = Lists.immutable.with("s1", "s2", "s3");
セット、バッグ、マップでも同じことができます。
Set<String> set = Sets.mutable.with("s1", "s2", "s3");
MutableSet<String> mSet = Sets.mutable.with("s1", "s2", "s3");
ImmutableSet<String> iSet = Sets.immutable.with("s1", "s2", "s3");
Bag<String> bag = Bags.mutable.with("s1", "s2", "s3");
MutableBag<String> mBag = Bags.mutable.with("s1", "s2", "s3");
ImmutableBag<String> iBag = Bags.immutable.with("s1", "s2", "s3");
Map<String, String> map =
Maps.mutable.with("s1", "s1", "s2", "s2", "s3", "s3");
MutableMap<String, String> mMap =
Maps.mutable.with("s1", "s1", "s2", "s2", "s3", "s3");
ImmutableMap<String, String> iMap =
Maps.immutable.with("s1", "s1", "s2", "s2", "s3", "s3");
SortedSets、SortedBags、SortedMapsのファクトリもあります。
SortedSet<String> sortedSet = SortedSets.mutable.with("s1", "s2", "s3");
MutableSortedSet<String> mSortedSet = SortedSets.mutable.with("s1", "s2", "s3");
ImmutableSortedSet<String> iSortedSet = SortedSets.immutable.with("s1", "s2", "s3");
SortedBag<String> sortedBag = SortedBags.mutable.with("s1", "s2", "s3");
MutableSortedBag<String> mSortedBag = SortedBags.mutable.with("s1", "s2", "s3");
ImmutableSortedBag<String> iSortedBag = SortedBags.immutable.with("s1", "s2", "s3");
SortedMap<String, String> sortedMap =
SortedMaps.mutable.with("s1", "s1", "s2", "s2", "s3","s3");
MutableSortedMap<String, String> mSortedMap =
SortedMaps.mutable.with("s1", "s1", "s2", "s2", "s3","s3");
ImmutableSortedMap<String, String> iSortedMap =
SortedMaps.immutable.with("s1", "s1", "s2", "s2", "s3","s3");
注:私はEclipse Collectionsのコミッターです。
私はグアバに精通していませんが、他の回答で言及されたほとんどすべてのソリューションとJDKの使用にはいくつかの欠陥があります:
_Arrays.asList
_メソッドは、固定サイズのリストを返します。
{{Double-brace initialization}}は、クラスパスの乱雑さと 実行速度の低下 を作成することが知られています。また、要素ごとに1行のコードが必要です。
Java 9:静的ファクトリメソッド _List.of
_ 構造的に不変のリストを返します。さらに、_List.of
_は 値ベース であるため、そのコントラクトは毎回新しいオブジェクトを返すことを保証しません。
以下は、複数の個々のオブジェクトをArrayList
に収集するためのJava 8ワンライナー)、またはそのためのコレクションです。
_List<String> list = Stream.of("s1", "s2", "s3").collect(Collectors.toCollection(ArrayList::new));
_
注:一時的なコレクション(new ArrayList<>(Arrays.asList("s1", "s2", "s3"))
)をコピーするaioobeのソリューションも優れています。