Подтвердить что ты не робот

Предоставляет ли JDK фиктивный потребитель?

У меня есть потребность в блоке кода, чтобы потреблять "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()?

4b9b3361

Ответ 1

Нет, JDK не предоставляет фиктивного потребителя, а также другие предопределенные функции, такие как фиктивный исполняемый, всегда истинный предикат или поставщик, который всегда возвращает ноль. Просто напишите t -> {}, это все равно короче вызова любого возможного готового метода, который будет делать то же самое.