I have the following code:
public boolean isImageSrcExists(String imageSrc) {
int resultsNum = 0;
List<WebElement> blogImagesList = driver.findElements(blogImageLocator);
for (WebElement thisImage : blogImagesList) {
if (thisImage.getAttribute("style").contains(imageSrc)) {
resultsNum++;
}
}
if (resultsNum == 2) {
return true;
} else {
return false;
}
}
What is the proper way of converting it to use Java 8 Stream
s?
When I'm trying to use map()
, I get an error since getAttribute
isn't a Function
.
int a = (int) blogImagesList.stream()
.map(WebElement::getAttribute("style"))
.filter(s -> s.contains(imageSrc))
.count();
You cannot do exactly what you want - explicit parameters are not allowed in method references.
But you could...
...create a method that returns a boolean and harcoded the call to
getAttribute("style")
:This would allow you to use the method ref:
...or you could define a variable to hold the function:
This would allow you to simply pass the variable
...or you could curry and combine the above two approaches (this is certainly horribly overkill)
Then you would need to call
toAttributeExtractor
to get aFunction
and pass that into themap
:Although, realistically, simply using a lambda would be easier (as you do on the next line):
You can't pass a parameter to a method reference. You can use a lambda expression instead :