Java 8身份映射lambda?
我想用Java8中的聚合运算求几个矩形的平均面积
Rectangle[] rects = new Rectangle[]{
new Rectangle(5, 10, 20, 30),
new Rectangle(10, 20, 30, 40),
new Rectangle(20, 30, 5, 15)
};
System.out.println("Average area: "
+ Arrays.asList(rects)
.parallelStream()
.map((RectangularShape r) -> (r.getWidth() * r.getHeight()))
.collect(Collectors.averagingDouble(o -> o)));
// I don't like this "o -> o"
System.out.println("Expected: 625");
然而,我觉得o -> o
所需的averagingDouble
有点傻。是否有一个更直观的替代品来替代这个lambda(甚至可能是某个地方的股票标识lambda)
# 1 楼答案
在
java.util.function.X
中有identity()
方法,其中X=Function<T,R>
,UnaryOperator<T>
,IntUnaryOperator
,LongUnaryOperator
,DoubleUnaryOperator
。在Function<T,R>
中的一个使用T
。所以看起来DoubleUnaryOperator::identity
应该可以工作,尽管o -> o
的输入要少得多。(再一次,o -> o
看起来更像某种表情符号,而不是表情……)