我正在寻找一种非常简单的方法来创建一个Set。
Arrays.asList("a", "b" ...)
创建List<String>
Set
是否有类似内容?
答案 0 :(得分:57)
使用Guava,就像那样简单:
Set<String> mySet = ImmutableSet.<String> of("a", "b");
或者对于一个可变集:
Set<String> mySet = Sets.newHashSet("a", "b")
有关更多数据类型,请参阅Guava user guide
答案 1 :(得分:47)
您可以使用
new HashSet<String>(Arrays.asList("a","b"));
答案 2 :(得分:47)
现在使用Java 8,您可以在不需要第三方框架的情况下执行此操作:
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
请参阅Collectors。
享受!
答案 3 :(得分:22)
对于具有零个或一个成员的集合的特殊情况,您可以使用:
java.util.Collections.EMPTY_SET
和
java.util.Collections.singleton("A")
答案 4 :(得分:16)
正如其他人所说,使用:
new HashSet<String>(Arrays.asList("a","b"));
Java中存在 not 的原因是Arrays.asList
返回固定大小的列表,换句话说:
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
返回:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
Set
类中没有“固定大小”Arrays
的JDK实现。你为什么要这个? Set
保证没有重复项,但如果您手动输入它们,则不需要该功能...... List
有更多方法。两个接口都扩展Collection
和Iterable
。
正如其他人所说,使用guava如果你真的想要这个功能 - 因为它不在JDK中。看看他们的答案(特别是MichaelSchmeißer的回答),了解相关信息。
答案 5 :(得分:7)
在Java 9中,通过工厂方法添加了类似的功能:
Set<String> oneLinerSet = Set.of("a", "b", ...);
(List
也有等价物。)
答案 6 :(得分:2)
不,但你可以这样做
new HashSet<String>(Arrays.asList("a", "b", ...));
答案 7 :(得分:2)
答案 8 :(得分:2)
这是一个可以使用的方法
alert.addAction(UIAlertAction(title: "Ok", style: default, handler: nil)
答案 9 :(得分:1)
使用Java 8和枚举的另一种方法是:
Set<String> set = EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.READ);
请参见EnumSet。
我建议在这种方法和
之间进行性能分析Set<String> set = Stream.of(StandardOpenOption.CREATE, StandardOpenOption.READ).collect(Collectors.toSet());
因为如果您有五个以上的元素,则该方法的javadoc指出可能是性能问题,如您在Set.Of(E, E...)的javadoc中所见。