我正在尝试通过以下方式来减少类型为矩形的流:
方法
我希望将流减少至若一次
然而,由于可以看到
public static Optional<Rectangle> intersectAll(Stream<Rectangle> rectangles) {
return rectangles
.reduce((r1, r2) -> r1.intersection(r2));
方法
intersection
接受一个类型为Rectangle
的参数,返回类型为Optional<Rectangle>
。如果两个矩形相交,则返回Optional.of(Rectangle)
,否则返回Optional.empty()
。我希望将流减少至若一次
r1.intersection(r2)
Lambda函数返回空可选项,则intersectAll
方法返回空可选项。如果r1.intersection(r2)
始终返回矩形,则intersectAll
输出结果将仅为减少后的矩形。然而,由于可以看到
intersection
方法不接受可选参数,因此reduce无法正常工作。所以我想问是否有一种方法可以在遇到空可选项时“跳出”reduce循环,以便我可以返回空可选项。
Optional<Rectangle> optRect = rectangles.reduce((r1, r2) -> r1.equals(EMPTY) ? EMPTY : r1.intersection(r2).orElse(EMPTY));
然后return optRect.isPresent() && optRect.get().equals(EMPTY) ? Optional.empty() : optRect;
其中EMPTY
表示一个特殊的Rectangle
。 - Aniket SahrawatOptional<Rectangle>
中,但是在这种情况下,使用循环更为合适。 - njzk2