java - JDK 是否提供了一个虚拟消费者?

标签 java java-8 java-stream consumer

本质上,我需要在一段代码中使用流中的“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() ?

最佳答案

不,JDK 不提供虚拟使用者以及其他预定义函数,例如虚拟可运行、始终为真谓词或始终返回零的供应商。只需编写 t -> {},它总比调用任何可能的 ready 方法来做同样的事情要短。

关于java - JDK 是否提供了一个虚拟消费者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35306760/

相关文章:

java - 通过tomcat运行struts2时报错(错误包括 "java.util.concurrent.ThreadPoolExecutor.runWorker..."

java - 到 "null"或不到 "null"我类(class)的属性

java - 复制一个流以避免 "stream has already been operated upon or closed"

java - 使用带有连接字符分隔符的收集器

java - 使用流递归展平列表

java - jdbc 使用自增字段插入数据库

java - AVD 无法正常工作。它出现了但无法解决

java - Java 中的零垃圾大字符串反序列化,Humongous 对象问题

java8 流 api 抛出不兼容的类型 : Object[] cannot be converted to Integer[] when converting String array to Integer array

java-8 - 运行Maven集成测试时获取 "Expecting a stackmap frame at branch target"