При написании приложений на Java существует много вариантов использования java.util.Collection
.
Поскольку java.util.stream.Stream
был введен с Java 8, я наткнулся на некоторые прецеденты, где трудно решить, что использовать.
Например: Вы собираетесь написать некоторые утилиты-методы.
public static List<?> filterHashToList(int hash, Collection<?> toFilter) {
return toFilter.stream()
.filter((Object o) -> hash == o.hashCode())
.collect(Collectors.toCollection(LinkedList::new));
}
Что можно сказать о написании:
public static List<?> filterHashToList(int hash, Collection<?> toFilter) {
List<Object> result = new LinkedList<>();
for(Object o : toFilter) {
if(hash == o.hashCode()) {
result.add(o);
}
}
return result;
}
Оба метода приведут к одному и тому же результату. java.util.stream.Stream
и java.util.stream.Collector
являются интерфейсами, поэтому реализация может также меняться, если я использую пользовательские потоки и коллекторы.
Я думаю, что там есть множество реализаций, используя старую фасонированную петлю.
Итак, можно ли ответить, что использовать, поток или цикл, в случае использования? И если да, нужно ли при необходимости обновлять все реализации?
Или мне даже нужно предоставить оба способа, используя утилиты-методы? Или также я должен предоставить mthed, возвращающий поток после процесса фильтрации, чтобы вы могли работать с ним тоже, если это необходимо?