Учитывая, что data
- это некоторый список с Bean
объектами, вам нужно вернуть собранный вами поток:
return data.stream()
.map(bean -> bean.getName().equals(name) ? objectBean : bean)
.collect(Collectors.toList());
Если data
- непустая итерируемая, тогда вывод должен быть так же, как map
принимает Function
объект. Тем не менее, это не очень хороший вариант использования для Stream
API:
Во-первых, потоки предназначены для целей без побочных эффектов (т. Е. Для создания новых структур данных, а не их обновления). Потоковый API поддерживает forEach(Consumer<super T>)
, который разработан для побочных эффектов, но так же, как и многие другие коллекции, фактически все Iterables, тогда как неизменяемые операции, такие как map
и flatMap
, не являются.
Second Я не вижу остальную часть вашей программы, но, по крайней мере, в этом фрагменте вы, кажется, обновляете свою структуру данных на основе имени, и вы предполагаете, что имя уникально, потому что вы остановились, как только достигли первого Bean
с именем, которое вы ищете. Попробуйте использовать Map<String, Bean>
в качестве структуры данных.
Наконец, streams
- это ленивые структуры данных, а это означает, что все цепочки операций вычисляются при сборе. Это дает стимул объединять множество вычислений вместе - объединение в цепочку только одного map
не дает вам никаких преимуществ в производительности (хотя это дает вам ссылочную прозрачность).