This is something that every now and then I have to do: check whether either one or all elements of a collection meet a certain criteria. The standard code initially in Java involved a for loop and iterating through the collection explicitly and checking the condition at each step.
Then Apache Commons came on with their nice utilities to specify a collection and a predicate and removed a lot of that boiler plate. (I use Apache libraries a lot but Google’s Guava and a lot of others — Spring for instance — had similar utilities.)
However, nowadays, as I spend a lot of my time dealing with Java 8 code — which has the powerful java streams — as well as Groovy, there are much easier ways of doing this, and even more so it occurred to me that these 2 are very similar, so I thought I’d draw a quick parallel here.
Here’s how you would check in Groovy that at least one element in a collection matches your criteria (let’s consider for this example we want to check that we have at least one even number):
def lst = [1, 2, 3] def matched = lst.any { it % 2 == 0 } |
Now here’s the same in Java 8 using streams:
List<Integer> lst = Arrays.asList(1, 2, 3); boolean matched = lst.stream().anyMatch( (it) -> { it % 2 == 0} ); |
And if you want to change that to check that all elements in a collection match the criteria:
def lst = [1, 2, 3] def matched = lst.every { it % 2 == 0 } |
and using Java streams:
List<Integer> lst = Arrays.asList(1, 2, 3); boolean matched = lst.stream().allMatch( (it) -> { it % 2 == 0} ); |
Not sure who copied from who here but I’m glad the interface is somewhat similar 🙂