Vla*_*mir 53 java arrays string initialization list
我正在寻找最短路径(在代码中)来初始化字符串列表和字符串数组,即包含"s1","s2","s3"字符串元素的列表/数组.
Jon*_*eet 98
有各种选择.我个人喜欢使用番石榴:
List<String> strings = Lists.newArrayList("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)
(番石榴是一个值得拥有的图书馆,当然:)
只使用JDK,您可以使用:
List<String> strings = Arrays.asList("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)
请注意,这将返回一个ArrayList,但这不正常java.util.ArrayList- 它是一个可变但固定大小的内部.
我个人更喜欢Guava版本,因为它清楚地表明发生了什么(将返回的列表实现).如果你静态导入方法,它仍然清楚发生了什么:
// import static com.google.common.collect.Lists.newArrayList;
List<String> strings = newArrayList("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)
...而如果你静态导入asList它看起来有点奇怪.
另一个Guava选项,如果您不想要任何可修改的列表:
ImmutableList<String> strings = ImmutableList.of("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)
通常我想要么有一个完全可变的列表(在这种情况下Lists.newArrayList是最好的),或完全不可变列表(在这种情况下ImmutableList.of是最好的).我很少想要一个可变但固定大小的列表.
aio*_*obe 27
Java 9引入了一种方便的方法List.of,如下所示:
List<String> l = List.of("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)
以下是一些替代方案:
// 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");
}};
Run Code Online (Sandbox Code Playgroud)
当涉及到数组时,你可以在声明点初始化它,如下所示:
String[] arr = { "s1", "s2", "s3" };
Run Code Online (Sandbox Code Playgroud)
如果您需要重新初始化它或创建它而不将其存储在变量中,您可以这样做
new String[] { "s1", "s2", "s3" }
Run Code Online (Sandbox Code Playgroud)
如果字符串常量可能是,它看起来像
String[] arr = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10",
"s11", "s12", "s13" };
Run Code Online (Sandbox Code Playgroud)
在这些我通常喜欢写作
String[] arr = "s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13".split(",");
Run Code Online (Sandbox Code Playgroud)
Buh*_*ndi 15
List<String> stringList = Arrays.asList("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)
所有这些对象都存在于JDK中.
PS:正如aioobe所说,这使得列表固定大小.