Добавить метод в поток Java 8
Работая с Java 8 Stream s, я иногда обнаруживаю, что Stream не имеет конкретного метода, который мне нужен ( например, takeWhile(), dropWhile (), skipLast()
). Как мне создать свой собственный класс потока, который имеет дополнительные методы без переписывания всей архитектуры Java 8 Stream?
Я знаю библиотеку StreamEx и знаю, что она имеет takeWhile() и dropWhile (). На момент написания этого, он не имеет skipLast()
, Я подал проблему для этого метода.
Приемлемым решением было бы показать, как можно расширить Java 8 Stream или StreamEx.
1 ответ
Решение
Начиная с версии 0.5.4 библиотека StreamEx имеет chain()
метод. Это позволяет создавать вспомогательные методы, которые подключаются удобно.
public static <T> UnaryOperator<StreamEx<T>> skipLast(int n)
{
return(stream -> skipLast(stream, n));
}
private static StreamEx<T> skipLast(Stream<T> input, int n)
{
// implement the real logic of skipLast
}
С учетом вышесказанного, теперь можно написать...
StreamEx.
of(input).
chain(skipLast(10)).
forEach(System.out::println);