Boh*_*ian 24 java consumer java-8 java-stream
我需要在代码块中使用流中的'n'项然后完成,实质上:
public static <T> void eat(Stream<T> stream, int n)
// consume n items of the stream (and throw them away)
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我无法改变签名返回Stream<T>简单return stream.skip(n); 我必须实际丢弃流中的一些元素(不是简单的逻辑) - 为下游消费者做好准备,这不需要知道这是怎么发生的,甚至不知道发生了什么.
最简单的方法是使用limit(n),但我必须调用流终止方法来激活流,所以本质上我有:
public static <T> void skip(Stream<T> stream, int n) {
stream.limit(n).forEach(t -> {});
}
Run Code Online (Sandbox Code Playgroud)
注意:此代码完全简化了实际代码,仅用于说明目的.实际上,限制将不起作用,因为存在围绕什么/如何消耗元素的逻辑.可以把它想象成从流中消费"header"元素,然后让消费者使用"body"元素.
这个问题是关于"无所事事"的lambda t -> {}.
在JDK中的某个地方是否有"无所事事"的消费者,比如"无所事事"功能Function.identity()?
Tag*_*eev 19
不,JDK不提供虚拟消费者以及其他预定义函数,例如虚拟可运行,始终为真的谓词或供应商,它们总是返回零.只是写t -> {}一下,它总是比调用任何可能的就绪方法更短.
是的。嗯,或多或少是的......
由于 aFunction也是 a Consumer,因此您可以用作Function.identity()“不执行任何操作”的消费者。
然而,编译器需要一些帮助才能实现这一飞跃:
someStream.forEach(identity()::apply);
Run Code Online (Sandbox Code Playgroud)
引入虚拟(空)消费者被考虑在票据范围内:
根据票证,决定不介绍了。
因此,JDK中不存在虚拟(空)消费者。
| 归档时间: |
|
| 查看次数: |
6238 次 |
| 最近记录: |