Java 8
У нас также есть возможность использовать Stream
. Мы можем получить поток различными способами:
Set<String> set = Stream.of("A", "B", "C", "D").collect(Collectors.toCollection(HashSet::new));
System.out.println(set);
String[] stringArray = {"A", "B", "C", "D"};
Set<String> strSet1 = Arrays.stream(stringArray).collect(Collectors.toSet());
System.out.println(strSet1);
// if you need HashSet then use below option.
Set<String> strSet2 = Arrays.stream(stringArray).collect(Collectors.toCollection(HashSet::new));
System.out.println(strSet2);
Исходный код Collectors.toSet()
показывает, что элементы добавляются один за другим в HashSet
, но спецификация не гарантирует, что это будет HashSet
.
"Нет никаких гарантий относительно типа, изменчивости, сериализуемости или
Потокобезопасность набора возвращена. "
Так что лучше использовать более позднюю опцию. Выход:
[A, B, C, D]
[A, B, C, D]
[A, B, C, D]
Неизменный набор (Java 9)
Java 9 представил Set.of
статический метод фабрики, который возвращает неизменяемый набор для предоставленных элементов или массива.
@SafeVarargs
static <E> Set<E> of(E... elements)
Проверьте Неизменяемый набор статических заводских методов для получения подробной информации.
Неизменный набор (Java 10)
Мы также можем получить неизменный набор двумя способами:
Set.copyOf(Arrays.asList(array))
Arrays.stream(array).collect(Collectors.toUnmodifiableList());
В методе Collectors.toUnmodifiableList()
внутренне используется Set.of
, представленный в Java 9. Также проверьте этот ответ для получения дополнительной информации.