As , we know , Groovy syntax accepts closures . Today also, Java 8 adds in its syntax closure .
However , When i write java8 closure in groovy file , i get an error like the following :
Person.findAll().stream().filter(e-> e.age > 20)
We get this error :
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 7: unexpected token: -> @ line 7, column 39.
Person.findAll().stream().filter(e-> e.controllerId > 0)
^
1 error
Nevertheless , the following works successully :
Person.findAll().stream()
Groovy compiler does not accept java 8 Lambdas.
The Groovy syntax doesn't support the lambda expressions, but we can rely on closure coersion to use Groovy closures as Java lambda expressions in our code. In the following sample we use the Java Streams API. Instead of lambda expressions for the filter and map methods we use Groovy closures.
Lambda Expressions were added in Java 8. A lambda expression is a short block of code which takes in parameters and returns a value. Lambda expressions are similar to methods, but they do not need a name and they can be implemented right in the body of a method.
In effect, java doesn't have closures at all. One may not notice the difference unless they have used real closures in a language that actually supports them.
Yeah, the Groovy parser does not accept Java 8 Lambdas (not closures).
You can use a closure in place of it (assuming you're on Groovy 2.3.*)
ie:
Person.findAll().stream().filter( { e -> e.age > 20 } )
Groovy 3.0+ will accept lambda format
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With