Почему не получается преобразовать stream в List?
почему в первом случае при попытке преобразовать стрим в лист - ошибка компиляции, а во втором - все ок? По-сути, ведь идентичные действия?
public class Test1 {
public static void main(String[] args) {
// Вариант 1
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
List<Integer> integerList = Arrays.stream(array)
.filter(s -> s%2 == 0)
.collect(Collectors.toList()); // compile error
// Вариант 2
List<String> stringList = Arrays.stream(args)
.filter(s -> s.length() <= 2)
.collect(Collectors.toList()); // ok
}
}
Ответы (1 шт):
Автор решения: First Sin
→ Ссылка
Проблема заключается в том, что int - примитивный тип, поэтому в первом случае у вас используется не стандартный Stream, а IntStream, который является последовательностью примитивных целочисленных значений. Так как вы не можете создать список, хранящий примитивы, необходимо их превратить в их объектную оболочку (т.е int -> Integer). Для этого используйте метод boxed():
List<Integer> integerList = Arrays.stream(array)
.filter(s -> s % 2 == 0)
.boxed()
.collect(Collectors.toList());