В Java, при работе с массивами и коллекциями, часто возникает задача преобразования массива в список. Но при использовании метода Arrays.asList()
, Java SE 1.4.2 и последующие версии ведут себя по-разному.
Вот пример кода:
int[] numbers = new int[] { 1, 2, 3 }; Arrays.asList(numbers);
В Java SE 1.4.2, этот код возвращает список, содержащий элементы 1, 2, 3. Однако, начиная с Java SE 1.5.0, этот же код возвращает список, содержащий массив numbers
.
Это может привести к ошибкам в коде, особенно если этот момент упущен:
Assert.assertTrue(Arrays.asList(numbers).indexOf(4) == -1);
Данный пример пройдет в Java SE 1.4.2, но не пройдет в Java SE 1.5.0 и последующих версиях, так как Arrays.asList(numbers)
возвращает список, содержащий массив numbers
, а не отдельные элементы.
Для преобразования массива примитивов в список в более новых версиях Java, можно использовать циклы или стримы.
Пример с использованием цикла:
int[] numbers = new int[] { 1, 2, 3 }; List<Integer> list = new ArrayList<>(); for (int i: numbers) { list.add(i); }
Пример с использованием стримов:
int[] numbers = new int[] { 1, 2, 3 }; List<Integer> list = Arrays.stream(numbers).boxed().collect(Collectors.toList());
Оба этих подхода вернут список, содержащий элементы 1, 2, 3, независимо от версии Java.
Добавить комментарий