Страницы

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

четверг, 2 января 2020 г.

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

#java #java_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>)
  


Что-то в полном ступоре, почему не работает..
    


Ответы

Ответ 1



Вы не преобразовали 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());

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

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