有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    java.util.function.X中有identity()方法,其中X=Function<T,R>UnaryOperator<T>IntUnaryOperatorLongUnaryOperatorDoubleUnaryOperator。在Function<T,R>中的一个使用T。所以看起来DoubleUnaryOperator::identity应该可以工作,尽管o -> o的输入要少得多。(再一次,o -> o看起来更像某种表情符号,而不是表情……)