如何快速方便地创建一个元素arraylist

Dav*_* T. 290 java collections arraylist

是否有一个实用方法可以在一行中执行此操作?我无法在任何地方找到它Collections,或者List.

public List<String> stringToOneElementList(String s) {
    List<String> list = new ArrayList<String>();
    list.add(s);
    return list;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ell*_*sch 392

固定尺寸 List

最简单的方法,我知道的,是创建一个固定大小的单个元素ListArrays.asList(T...)

// Returns a List backed by a varargs T.
return Arrays.asList(s);
Run Code Online (Sandbox Code Playgroud)

可变大小 List

如果它需要大小不同,你可以构建一个ArrayList固定大小的List

return new ArrayList<String>(Arrays.asList(s));
Run Code Online (Sandbox Code Playgroud)

(在Java 7+中)你可以使用菱形算子<>来制作它

return new ArrayList<>(Arrays.asList(s));
Run Code Online (Sandbox Code Playgroud)

  • Collections.singletonList(ELM); 更优选,因为它创建不可变列表. (46认同)
  • @RavishBhagdev - 并非总是如此.有时您可能希望稍后将内容添加到列表中.实际上,我在图中的路径查找算法中使用了这个答案的方法. (7认同)
  • 这正是我想要的.谢谢!我不知道为什么这是在数组中而不是列表,集合或其他什么. (3认同)
  • 小心这个解决方案.您无法修改列表.如果您尝试向此List添加元素,则会抛出UnsupportedOperationException! (3认同)
  • 从JDK9开始,会有一个返回不可变列表的方法List.of(E e1)(http://download.java.net/java/jdk9/docs/api/java/util/List.html#of -E-) (3认同)

And*_*rew 342

Collections.singletonList(object)
Run Code Online (Sandbox Code Playgroud)

此方法创建的列表是不可变的.

  • 请注意,此方法创建的列表是不可变的. (55认同)
  • IntelliJ IDEA自动推荐这个而不是`Arrays.asList(object)`. (36认同)
  • 所以你没有花时间写一行这个电话的后果?不可变列表 (2认同)
  • 请将此标记为已接受的答案。这比 Arrays.asList 好得多。 (2认同)

rge*_*man 68

您可以使用实用程序方法Arrays.asList并将结果提供给新的ArrayList.

List<String> list = new ArrayList<String>(Arrays.asList(s));
Run Code Online (Sandbox Code Playgroud)

其他选择:

List<String> list = new ArrayList<String>(Collections.nCopies(1, s));
Run Code Online (Sandbox Code Playgroud)

List<String> list = new ArrayList<String>(Collections.singletonList(s));
Run Code Online (Sandbox Code Playgroud)

使用Java 7+,您可以使用"diamond operator",替换new ArrayList<String>(...)new ArrayList<>(...).

Java 9

如果您使用的是Java 9+,则可以使用以下List.of方法:

List<String> list = new ArrayList<>(List.of(s));
Run Code Online (Sandbox Code Playgroud)

无论上述每个选项的使用如何,new ArrayList<>()如果您不需要列表是可变的,您可以选择不使用包装器.

  • 我很惊讶你是唯一提到`Collections.singletonList`的人. (8认同)
  • 更让我感到惊讶的是@AndyJ在我发表评论后发布了"Collections.singletonList"并且获得的票数比你已经拥有它的答案多2倍,而且已经有3年了......总是很有趣,偶然发现旧评论. (4认同)

小智 30

使用Java 8 Streams:

Stream.of(object).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

或者如果你需要一套:

Stream.of(object).collect(Collectors.toSet())
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用Guava的`Sets.newHashSet(objects)`来创建一个新集. (2认同)

use*_*019 15

另一个回答全部使用Arrays.asList(),返回一个不可修改的列表(UnsupportedOperationException如果您尝试添加或删除元素,则抛出该列表).要获得一个可变列表,您可以将返回的列表包装成一个新的,ArrayList如同几个答案所指出的那样,但更简洁的解决方案是使用Guava的 Lists.newArrayList()(自2011年发布以来至少可用于Guava 10).

例如:

Lists.newArrayList("Blargle!");
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 12

非常简单:

Arrays.asList("Hi!")
Run Code Online (Sandbox Code Playgroud)


veg*_*4me 5

看到Guava被提及时,我想我也建议使用Eclipse Collections(以前称为GS Collections)。

以下示例均返回List带有单个项目的。

Lists.mutable.of("Just one item");
Lists.mutable.with("Or use with");
Lists.immutable.of("Maybe it must be immutable?");
Lists.immutable.with("And use with if you want");
Run Code Online (Sandbox Code Playgroud)

其他集合也有类似的方法。