У бібліотеках, що мають важкі лямбда-файли перед Java 8, такими як Guava, виводи використовують загальні інтерфейси Java Collection Framework, тому їх легко передати зовнішнім / внутрішнім API і все-таки використати деякі ледачі обчислення, якщо бібліотечний метод це робить (наприклад, ледачий filter()
і transform()
).
Однак у Java 8 Streams виклик отримати a Collection
/ Map
is термінал (тобто нетерплячий), і він також виділить нові структури даних для отримання результатів.
Для складних обчислень з декількома етапами та схемою стратегії в середині це спричиняє багато непотрібних виділень через проміжні результати.
Отже, чи вважають люди гарною практикою для внутрішніх API (тобто стратегій стратегічних схем) приймати та повертати Stream
s, або я повинен просто відмовитися від ледачих, але не впорядкованих (пені призначений я думаю) API Guava?
Редагувати:
Моє головне питання Stream
полягає в тому, що його можна вживати лише один раз і передавати щось на зразок Supplier<Stream<X>>
виглядає надзвичайно громіздко. Це майже підштовхує вас просто пройти Collection
та потім повторити stream()
його (і заплатити вартість нетерплячої оцінки в цей момент).