mapToInt
создает IntStream
, у которого нет метода collect
, принимающего один аргумент Collector
.
Поскольку конечным результатом является List<Integer>
, у вас нетпреобразование Stream
в IntStream
:
List<Integer> lengths = a.stream().map(String::length).collect(Collectors.toList());
Преобразование Stream
в IntStream
будет иметь смысл, если вы хотите собрать элементы Stream
в примитивный массив:
int[] lengths = a.stream().mapToInt(String::length).toArray();
Если вы хотите преобразовать в IntStream
и все еще использовать метод collect
, вы можете написать следующее (что менее рекомендуется):
List<Integer> lengths =
a.stream()
.mapToInt(String::length)
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);