在java中初始化字符串列表的最短方法是什么?

2022-08-31 14:39:38

我正在寻找初始化字符串列表和字符串数组的最短方法(在代码中),即包含“s1”,“s2”,“s3”字符串元素的列表/数组。


答案 1

有多种选择。就个人而言,我喜欢使用番石榴

List<String> strings = Lists.newArrayList("s1", "s2", "s3");

(无论如何,番石榴是一个值得拥有的图书馆,当然:)

仅使用 JDK,您可以使用:

List<String> strings = Arrays.asList("s1", "s2", "s3");

请注意,这将返回一个 ,但这不是正常的 - 它是一个可变但大小固定的内部。ArrayListjava.util.ArrayList

就个人而言,我更喜欢番石榴版本,因为它清楚地表明了正在发生的事情(将返回的列表实现)。如果您静态导入该方法,仍然很清楚发生了什么:

// import static com.google.common.collect.Lists.newArrayList;
List<String> strings = newArrayList("s1", "s2", "s3");

...而如果你静态导入,它看起来有点奇怪。asList

另一个番石榴选项,如果你不想要一个可修改的任意方式列表:

ImmutableList<String> strings = ImmutableList.of("s1", "s2", "s3");

通常希望有一个完全可变的列表(在这种情况下是最好的)一个完全不可变的列表(在这种情况下是最好的)。我真的想要一个可变但固定大小的列表是很少见的。Lists.newArrayListImmutableList.of


答案 2

爪哇 9+

Java 9 引入了一个方便的方法 List.of,使用方法如下:

List<String> l = List.of("s1", "s2", "s3");

Java 8 及更早版本

以下是一些替代方法:

// 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(",");