Существует ли .asSet(...) в любом API?

Я ищу очень простой способ создания набора.

Arrays.asList("a", "b" ...) создает List<String>

Есть ли что-то подобное для Set?

Ответ 1

Теперь с помощью Java 8 вы можете сделать это без необходимости сторонней структуры:

Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());

См. Collectors.

Наслаждайтесь!

Ответ 2

Используя Guava, это так просто:

Set<String> mySet = ImmutableSet.<String> of("a", "b");

Или для изменяемого набора:

Set<String> mySet = Sets.newHashSet("a", "b")

Дополнительные сведения см. в Руководстве пользователя Guava

Ответ 3

Вы можете использовать

new HashSet<String>(Arrays.asList("a","b"));

Ответ 4

Для особых случаев наборов с нулем или одним членом вы можете использовать:

java.util.Collections.EMPTY_SET

и

java.util.Collections.singleton("A")

Ответ 5

Как говорили другие, используйте:

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)

В классе Arrays отсутствует реализация JDK "фиксированного размера" Set. Почему вы хотите этого? A Set гарантирует, что дубликатов нет, но если вы печатаете их вручную, вам не нужна эта функциональность... и List имеет больше методов. Оба интерфейса расширяют Collection и Iterable.


Как говорили другие, используйте guava Если вы действительно хотите эту функциональность, так как это не в JDK. Посмотрите их ответы (в частности, ответ Майкла Шмейсера) для получения информации об этом.

Ответ 6

Нет, но вы можете сделать это, как это

new HashSet<String>(Arrays.asList("a", "b", ...));

Ответ 7

В guava вы можете использовать

Set<String> set = Sets.newHashSet("a","b","c");

newHashSet

Ответ 8

Вот небольшой способ, который вы можете использовать

  /**
   * 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));
  }