相关疑难解决方法(0)

Java 8中的实例方法引用类型之间有什么区别?

所以Java 8引入了方法引用,文档描述了这四种类型.

我的问题是两种实例类型之间的区别是什么?

  1. 引用特定对象的实例方法.
  2. 引用特定类型的任意对象的实例方法.

两者都参考参考但有什么显着不同?用于解决它们的类型推断是不同的吗?重要的是(在他们的例子中)一个是闭包而另一个是lambda?它与方法的参数数量有关吗?

java java-8 method-reference

20
推荐指数
1
解决办法
2621
查看次数

使用独特的组合器和累加器进行流减少的示例

问题是关于java.util.stream.Stream.reduce(U identity,BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner)方法。

要求之一是组合器功能必须与累加器功能兼容。对于所有u和t,必须满足以下条件:

 combiner.apply(u, accumulator.apply(identity, t)) == accumulator.apply(u, t) (*) 
Run Code Online (Sandbox Code Playgroud)

如果combineraccumulator相同,则上述相等性自动成立。

我的问题

有没有使用combiner和和减少流的示例accumulator

更新

为了澄清一些事情:

BinaryOperator实际上是在扩展BiFunction,因此在需要BiFunction时可以使用它。如果U和T相同,则始终是合法的:

operator<T> op = (x,y) -> something;

stream.reduce(id, op, op);
Run Code Online (Sandbox Code Playgroud)

我从来没有说过我可以一直使用combineras,acumulator因为在一般情况下,它们用于不同的目的并且是不同的Java类型。


另外,我对平凡的示例不感兴趣,但对并行流进行归约时在实践中遇到的自然示例不感兴趣。

对于一些琐碎的示例,有很多教程,例如教程


我为什么要问这个问题

基本上,存在这种简化方法的原因是针对并行流。在我看来,条件(*)如此之强,以至于在实践中,由于很少有还原操作可以实现此还原,因此它使还原无效。

java java-stream

8
推荐指数
1
解决办法
128
查看次数

标签 统计

java ×2

java-8 ×1

java-stream ×1

method-reference ×1