这在语法上是允许的,但我认为它违背了设计模式并且是一个坏主意。
static void accumulatorTest() {
ArrayList<Point> points = new ArrayList<>();
points.add(new Point(5, 6));
points.add(new Point(0, 6));
points.add(new Point(1, 9));
points.add(new Point(4, 16));
BinaryOperator<Point> sumPoints = new BinaryOperator<Point>() {
public Point apply(Point p1, Point p2) {
p2.x += p1.x;
p2.y += p1.y;
return new Point(p2); //return p2 and the list is transformed into running total
}
};
Point sum = points.stream().reduce(new Point(0, 0), sumPoints);
System.out.println(sum);
System.out.println(points);
}
答案是正确的;我们得到所有 x 和 y 坐标的总和。原始列表已修改,由输出确认:
java.awt.Point[x=10,y=37] [java.awt.Point[x=5,y=6], java.awt.Point[x=5,y=12], java.awt.Point [x=6,y=21], java.awt.Point[x=10,y=37]]