我正在寻找一种非常简单的方法来创建一个Set.
Arrays.asList("a", "b" ...) 创造一个 List<String>
有类似的东西Set吗?
Mr.*_*son 62
现在使用Java 8,您可以在不需要第三方框架的情况下执行此操作:
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
请参阅收藏家.
请享用!
Mic*_*ßer 58
使用Guava,它就是这么简单:
Set<String> mySet = ImmutableSet.<String> of("a", "b");
Run Code Online (Sandbox Code Playgroud)
或者对于一个可变集:
Set<String> mySet = Sets.newHashSet("a", "b")
Run Code Online (Sandbox Code Playgroud)
有关更多数据类型,请参阅Guava用户指南
Dev*_*ked 52
你可以用
new HashSet<String>(Arrays.asList("a","b"));
Run Code Online (Sandbox Code Playgroud)
Sam*_*ard 23
对于具有零个或一个成员的集合的特殊情况,您可以使用:
java.util.Collections.EMPTY_SET
Run Code Online (Sandbox Code Playgroud)
和:
java.util.Collections.singleton("A")
Run Code Online (Sandbox Code Playgroud)
dur*_*597 17
正如其他人所说,使用:
new HashSet<String>(Arrays.asList("a","b"));
Run Code Online (Sandbox Code Playgroud)
Java 中不存在的原因是Arrays.asList返回固定大小的列表,换句话说:
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
Run Code Online (Sandbox Code Playgroud)
返回:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
有没有一个"固定大小"的JDK实现Set内部Arrays类.你为什么要这个?一个Set保证没有重复,但如果你是用手工打字出来,你不应该需要这些功能...并List有更多的方法.两个接口都扩展Collection和Iterable.
正如其他人所说,使用guava如果你真的想要这个功能 - 因为它不在JDK中.查看他们的答案(特别是MichaelSchmeißer的答案)以获取相关信息.
Hol*_*ins 12
在Java 9中,通过工厂方法添加了类似的功能:
Set<String> oneLinerSet = Set.of("a", "b", ...);
Run Code Online (Sandbox Code Playgroud)
(也有等价物List.)
不,但你可以这样做
new HashSet<String>(Arrays.asList("a", "b", ...));
Run Code Online (Sandbox Code Playgroud)
这是一个你可以使用的小方法
/**
* Utility method analogous to {@link java.util.Arrays#asList(Object[])}
*
* @param ts
* @param <T>
* @return the set of all the parameters given.
*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> Set<T> asSet(T... ts) {
return new HashSet<>(Arrays.asList(ts));
}
Run Code Online (Sandbox Code Playgroud)