在某处可以使用效用方法吗?我无法在Collections
或List
中找到它。
public List<String> stringToOneElementList(String s) {
List<String> list = new ArrayList<String>();
list.add(s);
return list;
}
除非我打算在上面放上花哨的轮辋,否则我不想重新发明轮子。
嗯......类型可以是T
,而不是String
。但你明白了。 (所有空检查,安全检查......等)
答案 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。因此只适合: