Groovy any() and every()
04 Oct 2019 [tech
groovy
java
]
While writing a feature in one of the services in my current company, found a very nifty Groovy function.
I needed to check for a set of invalid keywords from another set. Before lambdas, we’d do something like this:
boolean containsInvalidKeywords(List stringToCheckList) {
for (String stringToCheck : stringToCheckList) {
for (String invalidKeyword : invalidKeywordList) {
if (stringToCheck.toLowerCase().contains(invalidKeyword.toLowerCase())) {
return true;
}
}
}
return false;
}
With lambdas, we can do the above snippet as a one-liner:
boolean containsInvalidKeywords(List stringToCheckList) {
return stringToCheckList.stream().anyMatch(
stringToCheck -> invalidKeywordList.stream().anyMatch(
invalidKeyword -> stringToCheck.toLowerCase().contains(invalidKeyword.toLowerCase())
)
);
}
Short, and simple! But with groovy, it’s even simpler!
def containsInvalidKeywords(def stringToCheckList) {
return stringToCheckList.toLowerCase().any{
stringToCheck -> invalidKeywordList.toLowerCase().any {
invalidKeyword -> stringToCheck.contains(invalidKeyword as CharSequence)
}
}
}
Which one do you think is easier?