Не возвращать коллекцию, вернуть Stream
.Таким образом, пользователю будет легко узнать, что он получает поток объектов, а не коллекцию.И реализацию коллекции легко изменить, не меняя способ ее использования.Пользователь может фильтровать, отображать, уменьшать и т. Д.
Итак:
class A {
private List<C> cs = new ArrayList<>();
public Stream<C> getCs() {
return cs.stream();
}
}
class B {
public void processCs(A a) {
a.getCs().filter(C::hasFooness).forEach(...);
}
}