是否有一个实用方法,可以在1行完成这个?我在收藏或列表中都找不到它。
public List<String> stringToOneElementList(String s) {
List<String> list = new ArrayList<String>();
list.add(s);
return list;
}
我不想重新发明轮子,除非我打算把花哨的轮辋上。
嗯…类型可以是T,而不是String。但你懂的。(所有的空检查,安全检查…等)
是否有一个实用方法,可以在1行完成这个?我在收藏或列表中都找不到它。
public List<String> stringToOneElementList(String s) {
List<String> list = new ArrayList<String>();
list.add(s);
return list;
}
我不想重新发明轮子,除非我打算把花哨的轮辋上。
嗯…类型可以是T,而不是String。但你懂的。(所有的空检查,安全检查…等)
当前回答
Collections.singletonList(object)
此方法创建的列表是不可变的。
其他回答
非常简单:
Arrays.asList("Hi!")
固定尺寸
据我所知,最简单的方法是使用Arrays.asList(T…)创建一个固定大小的单元素列表
// Returns a List backed by a varargs T.
return Arrays.asList(s);
可变大小列表
如果它的大小需要变化,你可以构造一个数组列表和固定大小的列表
return new ArrayList<String>(Arrays.asList(s));
并且(在Java 7+中)您可以使用菱形操作符<>来创建它
return new ArrayList<>(Arrays.asList(s));
单元素列表
集合可以返回一个包含单个元素且list为不可变的列表:
Collections.singletonList(s)
这样做的好处是ide代码分析不会对单个元素的asList(..)调用发出警告。
您可以使用实用程序方法Arrays。asList并将结果输入到一个新的数组列表中。
List<String> list = new ArrayList<String>(Arrays.asList(s));
其他选项:
List<String> list = new ArrayList<String>(Collections.nCopies(1, s));
and
List<String> list = new ArrayList<String>(Collections.singletonList(s));
ArrayList(集合)构造函数。 数组。asList方法。 集合。nCopies方法。 集合。singletonList方法。
在Java 7+中,您可以使用“diamond操作符”,将新的ArrayList<String>(…)替换为新的ArrayList<>(…)。
Java 9
如果您使用的是Java 9+,则可以使用List。的方法:
List<String> list = new ArrayList<>(List.of(s));
不管使用上述每个选项,如果您不需要您的列表是可变的,您可以选择不使用新的ArrayList<>()包装器。
还有一种方法是双大括号初始化,例如。
new ArrayList<String>() {{ add(s); }};
但它既低效又晦涩。因此只适合:
在不介意内存泄漏的代码中,例如大多数单元测试和其他短期程序; 如果其他的解决方案都不适用,我认为这意味着你已经一直向下滚动到这里,寻找填充一个不同类型的容器,而不是问题中的数组列表。
其他答案都使用Arrays.asList(),它返回一个不可修改的列表(如果您试图添加或删除一个元素,将抛出UnsupportedOperationException)。要获得一个可变列表,你可以将返回的列表包装在一个新的数组列表中,但一个更干净的解决方案是使用Guava的Lists.newArrayList()(至少从2011年发布的Guava 10开始可用)。
例如:
Lists.newArrayList("Blargle!");