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

时间:2013-12-03 18:29:26

标签: java arraylist collections

在某处可以使用效用方法吗?我无法在CollectionsList中找到它。

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

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

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

8 个答案:

答案 0 :(得分:362)

固定尺寸​​List

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

// Returns a List backed by a varargs T.
return Arrays.asList(s);

可变大小List

如果需要大小不同,您可以构建ArrayList和固定大小的List

return new ArrayList<String>(Arrays.asList(s));

和(在Java 7+中)您可以使用diamond operator <>来创建

return new ArrayList<>(Arrays.asList(s));

答案 1 :(得分:308)

Collections.singletonList(object)

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

答案 2 :(得分:64)

您可以使用效用方法Arrays.asList并将结果反馈到新的ArrayList

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));

使用Java 7+,您可以使用“菱形运算符”,将new ArrayList<String>(...)替换为new ArrayList<>(...)

Java 9

如果您使用的是Java 9+,则可以使用List.of method

List<String> list = new ArrayList<>(List.of(s));

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

答案 3 :(得分:27)

使用Java 8 Streams:

Stream.of(object).collect(Collectors.toList())

或者如果你需要一套:

Stream.of(object).collect(Collectors.toSet())

答案 4 :(得分:14)

其他答案全部使用Arrays.asList(),它返回一个不可修改的列表(如果您尝试添加或删除元素,则会引发UnsupportedOperationException)。要获得一个可变列表,您可以将返回的列表包装在一个新的ArrayList中,如同几个答案所指出的那样,但更清晰的解决方案是使用Guava's Lists.newArrayList()(至少可以使用{ {3}},于2011年发布)。

例如:

Lists.newArrayList("Blargle!");

答案 5 :(得分:11)

非常简单:

Arrays.asList("Hi!")

答案 6 :(得分:4)

看到番石榴被提及,我想我也会建议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");

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

答案 7 :(得分:1)

另一种选择是double brace initialization,例如

new ArrayList<String>() {{ add(s); }};

但是it is inefficient and obscure。因此只适合:

  • 代码中不介意内存泄漏,例如大多数单元测试和其他短期程序;
  • 并且如果没有其他解决方案适用,我认为这意味着你已经一直向下滚动,希望填充与问题中的ArrayList不同类型的容器。