Я ищу очень простой способ создания набора.
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());
См. Collectors.
Наслаждайтесь!
Используя 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")
Как говорили другие, используйте:
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. Посмотрите их ответы (в частности, ответ Майкла Шмейсера) для получения информации об этом.
Нет, но вы можете сделать это, как это
new HashSet<String>(Arrays.asList("a", "b", ...));
В guava вы можете использовать
Set<String> set = Sets.newHashSet("a","b","c");
Вот небольшой способ, который вы можете использовать
/**
* 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));
}