Ответ
Да, можно, но не напрямую через стандартный API. Промежуточные операции (intermediate operations) в Stream API являются внутренними методами интерфейса Stream. Однако вы можете создать свой собственный потоковый пайплайн, комбинируя существующие операции или используя StreamSupport и собственный Spliterator.
Практический подход: Создайте утилитный метод, который возвращает Stream с примененными вашими преобразованиями.
public class CustomStreamOperations {
public static <T> Stream<T> filterAndTransform(Stream<T> source, Predicate<T> filter, Function<T, T> transformer) {
return source.filter(filter).map(transformer);
}
}
// Использование
List<String> result = CustomStreamOperations
.filterAndTransform(stream, s -> s.length() > 3, String::toUpperCase)
.collect(Collectors.toList());
Важно: Реализация полностью новой низкоуровневой промежуточной операции (как filter или map) требует создания собственной реализации Stream, что крайне сложно и не рекомендуется, так как нарушает контракты и может быть несовместимо с будущими версиями Java.