У меня есть потребность в блоке кода, чтобы потреблять "n" элементы из потока, а затем заканчивать, по существу:
public static <T> void eat(Stream<T> stream, int n)
// consume n items of the stream (and throw them away)
}
В моей ситуации я не могу изменить подпись для возврата Stream<T>
и просто return stream.skip(n)
; Я должен фактически выбросить некоторые элементы из потока (не простая логика) - быть готовым к потребителю нисходящего потока, который не должен знать, как это произошло или даже это произошло.
Самый простой способ сделать это - использовать limit(n)
, но я должен вызвать метод завершения потока для активации потока, поэтому по существу у меня есть:
public static <T> void skip(Stream<T> stream, int n) {
stream.limit(n).forEach(t -> {});
}
Примечание. Этот код является грубым по сравнению с упрощением фактического кода и предназначен только для иллюстративных целей. Фактически, ограничение не будет работать, потому что есть логика вокруг того, как/как потреблять элементы. Подумайте об этом, как о потреблении элементов "заголовка" из потока, а затем о том, чтобы потребитель потреблял элементы "тела".
Этот вопрос касается "ничего не делать" лямбда t -> {}
.
Есть ли в JDK потребитель "ничего не делать" , например, функция "ничего не делать" Function.identity()
?