8

Как преобразовать массив в множество в Java

36

Проблема: Я хотел бы преобразовать массив в Set на Java. Есть очевидные способы сделать это (например, с помощью цикла), но я ищу что-то более элегантное, например, что-то похожее на:

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

Есть идеи?

5 ответ(ов)

0

Вы можете преобразовать массив строк в множество в Java 8, используя стримы. Вот пример кода, который иллюстрирует это:

String[] strArray = {"eins", "zwei", "drei", "vier"};

Set<String> strSet = Arrays.stream(strArray).collect(Collectors.toSet());
System.out.println(strSet);
// [eins, vier, zwei, drei]

В этом коде мы сначала создаем массив строк strArray, затем преобразуем его в поток с помощью Arrays.stream(). Далее мы собираем элементы потока в коллекцию типа Set с использованием метода collect() и Collectors.toSet(). Обратите внимание, что множество не гарантирует порядок элементов, поэтому при выводе на экран порядок может варьироваться.

0

Да, вы можете использовать varargs для создания стрима. Вот пример кода на Java, который делает именно это:

Set<T> resultSet = Stream.of(values).collect(Collectors.toSet());

Где values — это ваши переменные, переданные в качестве varargs. Не забудьте заменить T на нужный вам тип. Таким образом, вы сможете собрать элементы в Set без каких-либо проблем.

0

После того, как вы выполните Arrays.asList(array), вы можете создать Set, используя new HashSet(list).

Вот пример метода, который вы можете написать:

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

Этот метод принимает массив типа T, преобразует его в список через Arrays.asList(array), а затем создает и возвращает HashSet, который автоматически уберет дубликаты.

0

На данный момент уже было представлено множество отличных ответов, но большинство из них не работают с массивами примитивов (такими как int[], long[], char[], byte[] и т.д.).

В Java 8 и выше вы можете выполнить упаковку массива с помощью:

Integer[] boxedArr = Arrays.stream(arr).boxed().toArray(Integer[]::new);

Затем можно преобразовать его в Set, используя стрим:

Set<Integer> resultSet = Stream.of(boxedArr).collect(Collectors.toSet());

Таким образом, вы сможете создать Set из массива примитивов, предварительно упаковав его в массив объектов.

0

Быстро: вы можете сделать следующее:

// Статический список
List list = Arrays.asList(array);

// Растягиваемый список
list = new LinkedList(Arrays.asList(array));

// Дубликаты элементов отбрасываются
Set set = new HashSet(Arrays.asList(array));

Для обращения списка:

// Создать массив, содержащий элементы списка
Object[] objectArray = list.toArray();
MyClass[] array = (MyClass[])list.toArray(new MyClass[list.size()]);

// Создать массив, содержащий элементы множества
objectArray = set.toArray();
array = (MyClass[])set.toArray(new MyClass[set.size()]);

Не забудьте обработать предупреждения о приведении типов, если вы используете дженерики.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь