我想在Java中将数组转换为Set。有一些明显的方法可以做到这一点(即使用循环),但我想做一些更整洁的事情,比如:

java.util.Arrays.asList(Object[] a);

有什么想法吗?


当前回答

在完成Arrays.asList(array)之后,可以执行Setset=newHashSet(list);

下面是一个示例方法,您可以编写:

public <T> Set<T> GetSetFromArray(T[] array) {
    return new HashSet<T>(Arrays.asList(array));
}

其他回答

我根据上面的建议写了下面的内容——偷吧……真不错!

/**
 * Handy conversion to set
 */
public class SetUtil {
    /**
     * Convert some items to a set
     * @param items items
     * @param <T> works on any type
     * @return a hash set of the input items
     */
    public static <T> Set<T> asSet(T ... items) {
        return Stream.of(items).collect(Collectors.toSet());
    }
}

在Java 10中:

String[] strs = {"A", "B"};
Set<String> set = Set.copyOf(Arrays.asList(strs));

Set.copyOf返回包含给定集合元素的不可修改集合。

给定的集合不能为null,并且不能包含任何null元素。

Varargs也会起作用!

Stream.of(T... values).collect(Collectors.toSet());

使用Guava,您可以做到:

T[] array = ...
Set<T> set = Sets.newHashSet(array);

new HashSet<Object>(Arrays.asList(Object[]a));

但我认为这会更有效率:

final Set s = new HashSet<Object>();    
for (Object o : a) { s.add(o); }