在 for 循环中断言布尔集的更短方法

Shorter way to assert boolean set in for loop

有没有办法让下面的代码更简单更短?

boolean clicked = false;
    for (WebElement anchor : anchorLinksForProducts) {
        if (anchor.getAttribute("href").contains(id)) {
            anchor.click();
            clicked = true;
            break;
        }
    }

    Assert.assertTrue(clicked, "Could not find a valid product link with id : " + id);

流应该使代码更短:

Optional<WebElement> anchor = 
    anchorLinksForProducts.stream()
                          .filter(a -> a.getAttribute("href").contains(id))
                          .findFirst();
if (anchor.isPresent()) {
    anchor.get().click();
} else {
    fail("Could not find a valid product link with id : " + id);
}

对@Mureinik 回答的改进。

anchorLinksForProducts.stream()
    .filter(a -> a.getAttribute("href").contains(id))
    .findFirst()
    .ifPresentOrElse​(
        WebElement::click,
        () -> fail("Could not find a valid product link with id : " + id)
    );

此代码中的开销略多,但流总是如此,如果它是测试代码则不是问题。