为什么LongSummaryStatistics实现IntConsumer?

mkj*_*kjh 13 java java-8 java-stream

为什么还有LongSummaryStatistics实现的IntConsumer时候IntSummaryStatistics实现IntConsumer

And*_*ner 15

LongSummaryStatistics实现IntConsumer,以便它可以接受int值和long值.

例如,这允许您将其传递给需要的方法IntConsumer,以便int抽象地使用某些数据:

LongSummaryStatistics lss = new LongSummaryStatistics();
someMethod(lss);

void someMethod(IntConsumer consumer) { ... }
Run Code Online (Sandbox Code Playgroud)

没有真正的理由说明为什么LongSummaryStatistics不能用于此目的:int可以永远扩大到long无损失.但是,除非直接实现lss,someMethod否则类型系统不允许用作参数.LongSummaryStatisticsIntConsumer

没错,您可以在不使用lambda实现接口的情况下执行此操作:

someMethod(i -> lss.consume(i));
Run Code Online (Sandbox Code Playgroud)

但直接使用参考只是有点整洁.

  • 我不明白你的意思是"为什么让消费者定义单独的int和long流然后混合它们"?Streams不是`*SummaryStatistics`的唯一数据源,您可以直接调用这些方法. (2认同)