JDK 是否提供虚拟使用者?

2022-09-01 02:07:18

我需要在一个代码块中使用流中的“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 -> {});
}

注意:此代码是对实际代码的过度简化,仅用于说明目的。实际上,限制不起作用,因为围绕什么/如何使用元素有逻辑。可以把它想象成从流中消耗“header”元素,然后让使用者使用“body”元素。

这个问题是关于“什么都不做”的lambda。t -> {}

在JDK的某个地方是否有“什么都不做”的消费者,比如“什么都不做”的功能?Function.identity()


答案 1

不,JDK 不提供虚拟消费者以及其他预定义函数,如虚拟可运行、始终为真的谓词或始终返回零的供应商。只需编写,它无论如何都比调用任何可能的 ready 方法更短,后者将执行相同的操作。t -> {}


答案 2

引入虚拟(空)消费者被考虑在票证的范围内:

根据门票,决定不引入它。

因此,JDK 中没有虚拟(空)使用者。


推荐