如何快速方便地创建单元素arraylist [复制]

问题

这个问题在这里已有答案:

  • 在一行30中的ArrayList的初始化答案

在某个地方是否有可以在一行中执行此操作的实用程序方法?我无法在CollectionsList的任何地方找到它。

public List<String> stringToOneElementList(String s) {
    List<String> list = new ArrayList<String>();
    list.add(s);
    return list;
}

除非我打算在上面放上花哨的轮辋,否则我不想重新发明轮子。

嗯...类型可以是T,而不是String。但你明白了。 (所有空检查,安全检查......等)


#1 热门回答(299 赞)

###固定尺寸列表

我所知道的最简单的方法是创建一个固定大小的单个元素ListwithArrays.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。