I want to use lambda expressions inside a TextField expression as follows:
Arrays.asList($F{field1}, $F{field2}, $F{field3}).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / "))
Assuming these values for the fields:
$F{field1} = 1 $F{field2} = null $F{field3} = 2
Expected result of TextField evaluation:
1 / 2
Instead, I get an error message in the IDE:
Lambda expressions are allowed only at source level 1.8 or above
And this is an exception inside the IDE at compile time:
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 1. Lambda expressions are allowed only at source level 1.8 or above value = "Contato: " + Arrays.asList(((java.lang.String)field_c_telefone.getValue()), ((java.lang.String)field_c_celular.getValue()), ((java.lang.String)field_c_fax.getValue()), ((java.lang.String)field_c_email.getValue())).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / ")); //$JR_EXPR_ID=22$ <------------> 2. Lambda expressions are allowed only at source level 1.8 or above value = "Contato: " + Arrays.asList(((java.lang.String)field_c_telefone.getOldValue()), ((java.lang.String)field_c_celular.getOldValue()), ((java.lang.String)field_c_fax.getOldValue()), ((java.lang.String)field_c_email.getOldValue())).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / ")); //$JR_EXPR_ID=22$ <------------> 3. Lambda expressions are allowed only at source level 1.8 or above value = "Contato: " + Arrays.asList(((java.lang.String)field_c_telefone.getValue()), ((java.lang.String)field_c_celular.getValue()), ((java.lang.String)field_c_fax.getValue()), ((java.lang.String)field_c_email.getValue())).stream().filter(i -> i != null).collect(java.util.stream.Collectors.joining(" / ")); //$JR_EXPR_ID=22$ <------------> 3 errors . at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:206) at net.sf.jasperreports.eclipse.builder.JasperReportCompiler.compileReport(JasperReportCompiler.java:294) at net.sf.jasperreports.eclipse.builder.JasperReportCompiler.compileReport(JasperReportCompiler.java:146) at net.sf.jasperreports.eclipse.builder.JasperReportsBuilder.compileJRXML(JasperReportsBuilder.java:220) at com.jaspersoft.studio.editor.action.CompileAction.actionCompile(CompileAction.java:142) at com.jaspersoft.studio.editor.action.CompileAction$1.run(CompileAction.java:93) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
I have already changed my draft report to use JRE System 1.8, but the error continues.
How can i solve this? Does jasper compiler support lambdas?
source share