问题
这个问题在这里已有答案:
- 在一行30中的ArrayList的初始化答案
在某个地方是否有可以在一行中执行此操作的实用程序方法?我无法在Collections
或List
的任何地方找到它。
public List<String> stringToOneElementList(String s) {
List<String> list = new ArrayList<String>();
list.add(s);
return list;
}
除非我打算在上面放上花哨的轮辋,否则我不想重新发明轮子。
嗯...类型可以是T
,而不是String
。但你明白了。 (所有空检查,安全检查......等)
#1 热门回答(299 赞)
###固定尺寸列表
我所知道的最简单的方法是创建一个固定大小的单个元素List
withArrays.asList(T...)
like
// Returns a List backed by a varargs T.
return Arrays.asList(s);
###可变大小列表
如果它需要大小不同,你可以构建一个ArrayList
和固定大小的List
return new ArrayList<String>(Arrays.asList(s));
和(在Java 7中)你可以使用thediamond operator<>
来制作它
return new ArrayList<>(Arrays.asList(s));
#2 热门回答(244 赞)
Collections.singletonList(object)
#3 热门回答(53 赞)
你可以使用实用程序方法Arrays.asList
并将结果提供给newArrayList
。
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,你可以使用"diamond operator",替换new ArrayList<String>(...)
withnew ArrayList<>(...)
。
Java 9
如果你使用的是Java 9,则可以使用List.of
方法:
List<String> list = new ArrayList<>(List.of(s));
无论上述每个选项的使用如何,如果你不需要列表是可变的,你可以选择不使用new ArrayList<>()
wrapper。