1. Обзор
В этой короткой статье мы рассмотрим преобразование между массивом
и набором
— сначала с использованием простой Java, затем Guava и библиотеки Commons Collections от Apache.
Эта статья является частью серии «Java — Back to Basic» здесь, на ForEach.
2. Преобразование массива
в набор
2.1. Использование простой Java
Давайте сначала посмотрим, как превратить массив в Set
, используя простую Java :
@Test
public void givenUsingCoreJavaV1_whenArrayConvertedToSet_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
Set<Integer> targetSet = new HashSet<Integer>(Arrays.asList(sourceArray));
}
В качестве альтернативы можно сначала создать Set , а затем заполнить его элементами массива:
@Test
public void givenUsingCoreJavaV2_whenArrayConvertedToSet_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
Set<Integer> targetSet = new HashSet<Integer>();
Collections.addAll(targetSet, sourceArray);
}
2.2. Использование Google Гуавы
Далее давайте посмотрим на преобразование Guava из массива в Set :
@Test
public void givenUsingGuava_whenArrayConvertedToSet_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
Set<Integer> targetSet = Sets.newHashSet(sourceArray);
}
2.3. Использование коллекций Apache Commons
Наконец, давайте сделаем преобразование, используя библиотеку Commons Collection от Apache:
@Test
public void givenUsingCommonsCollections_whenArrayConvertedToSet_thenCorrect() {
Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 };
Set<Integer> targetSet = new HashSet<>(6);
CollectionUtils.addAll(targetSet, sourceArray);
}
3. Преобразование набора в массив
3.1. Использование простой Java
Теперь давайте посмотрим на обратное — преобразование существующего Set в массив :
@Test
public void givenUsingCoreJava_whenSetConvertedToArray_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
Integer[] targetArray = sourceSet.toArray(new Integer[0]);
}
Обратите внимание, что toArray(new T[0])
является предпочтительным способом использования метода по сравнению с toArray(new T[size])
. Как доказывает Алексей Шипилев в своем блоге , это кажется быстрее, безопаснее и чище.
3.2. Использование гуавы
Далее — решение Guava:
@Test
public void givenUsingGuava_whenSetConvertedToArray_thenCorrect() {
Set<Integer> sourceSet = Sets.newHashSet(0, 1, 2, 3, 4, 5);
int[] targetArray = Ints.toArray(sourceSet);
}
Обратите внимание, что мы используем Ints
API от Guava, поэтому это решение зависит от типа данных, с которым мы работаем.
4. Вывод
Реализацию всех этих примеров и фрагментов кода можно найти на Github — это проект на основе Maven, поэтому его легко импортировать и запускать как есть.