Страницы

Поиск по вопросам

понедельник, 14 января 2019 г.

В чем проблема со Stream?

Хочу преобразовать массив некоторых идентификаторов (все типа int) в список с некоторой попутной фильтрацией ( в список не нужно добавлять все идентификаторы).
Вот код:
ArrayList visitorsIdexes = Arrays.stream(targetVisitors) .filter(id -> checkVisitor(id, target.getTargetSegmentCube())) .map(id -> Integer.valueOf(id)) .collect(Collectors.toList());
Только оне не компилируется с такой проблемой:
Multiple markers at this line Type mismatch: cannot convert from Collector> to Supplier The method collect(Supplier, ObjIntConsumer, BiConsumer) in the type IntStream is not applicable for the arguments (Collector>)
Что-то в полном ступоре, почему не работает..


Ответ

Вы не преобразовали IntStream в Stream. По факту map(id -> Integer.valueOf(id)) ничего не делает, потому что map возвращает тот же IntStream. Чтобы преобразовать в объектный поток в общем случае нужен mapToObj, а в вашем конкретном проще всего написать boxed()
ArrayList visitorsIdexes = Arrays.stream(targetVisitors) .filter(id -> checkVisitor(id, target.getTargetSegmentCube())) .boxed() .collect(Collectors.toList());

Комментариев нет:

Отправить комментарий