我正在寻找一种非常简单的方法来创建一个集合。
Arrays.asList("a", "b" ...)
创建一个List<String>
有什么类似的Set
吗?
我正在寻找一种非常简单的方法来创建一个集合。
Arrays.asList("a", "b" ...)
创建一个List<String>
有什么类似的Set
吗?
现在使用 Java 8,您可以在不需要第三方框架的情况下做到这一点:
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
请参阅收集器。
享受!
使用Guava,就这么简单:
Set<String> mySet = ImmutableSet.<String> of("a", "b");
或者对于一个可变集合:
Set<String> mySet = Sets.newHashSet("a", "b")
有关更多数据类型,请参阅Guava 用户指南
你可以使用
new HashSet<String>(Arrays.asList("a","b"));
对于具有零个或一个成员的集合的特殊情况,您可以使用:
java.util.Collections.EMPTY_SET
和:
java.util.Collections.singleton("A")
在 Java 9 中,通过工厂方法添加了类似的功能:
Set<String> oneLinerSet = Set.of("a", "b", ...);
(也有等价物List
。)
正如其他人所说,使用:
new HashSet<String>(Arrays.asList("a","b"));
这在 Java 中不存在的原因是它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
类中没有“固定大小”的 JDK 实现Arrays
。你为什么要这个?ASet
保证没有重复项,但是如果您手动输入它们,则不需要该功能......并且List
有更多方法。两个接口都扩展Collection
和Iterable
.
正如其他人所说,如果你真的想要这个功能,请使用guava - 因为它不在 JDK 中。查看他们的答案(特别是 Michael Schmeißer 的答案)以获取相关信息。
这是你可以使用的一个小方法
/**
* 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));
}
不,但你可以这样做
new HashSet<String>(Arrays.asList("a", "b", ...));
使用 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 中看到的那样。