I have this string 1|1|1|1
and I want to sum the numbers inside spel statement.
I tried this one but got wrong expression.
T(java.util.Arrays).stream(SERVICE_CLASS.split('|')).reduce(Integer::sum)
the log :
org.springframework.expression.spel.SpelParseException: Expression [new Object[] {T(java.util.Arrays).stream(SERVICE_CLASS.split('|')).reduce(Integer::sum)}] @81: EL1043E: Unexpected token. Expected 'rparen())' but was 'colon(:)'
the full code :
@Test fun `test sum values`() {
val cont = ScriptingContext.default();
val contextrecord: Map<String, String> = mapOf(
"value" to "1|1|1|1"
)
val context = cont.getEvalContext()
context.setRootObject(contextrecord)
val value = cont.parser.parseExpression("new Object[] {T(java.util.Arrays).stream(value.split('|')).reduce(Integer::sum)}").getValue(context) as Array<Object>
println(value.toString())
assertEquals(value[0], "4")
}
any suggest to do it ?
SpEL stands for Spring Expression LANGUAGE. It is not Java; no lambdas, or method references are supported.
You can, however, register lambdas as SpEL functions; see Spring Expression Language - Java 8 forEach or stream on list