当尝试执行下面迭代
Map<String,List>
值的代码片段时,它会在符号 > 处抛出 BeanShell 解析异常。我能找到解决这个问题的任何解决方案吗?
map.entrySet().stream().forEach(map -> {
if (map.getValue().stream().anyMatch(s -> groupDN.startsWith(s.toUpperCase()))) {
return "DONE";
}
;
});
Exception running rule: BeanShell script error: bsh.ParseException: Parse error at line 30, column 22. Encountered: > BSF info: Test_RO at line: 0 column: columnNo
Java 8+ Streams 本身实际上“只是”一堆 Java 库类。
您真正在这里问的是 BeanShell 是否支持以下 Java 语言功能,这些功能是编写使用 Streams 的惯用 Java 代码所需的:
https://github.com/beanshell/beanshell#development-road-map),但未提及 lambda 和类型推断。
https://code.google.com/archive/p/beanshell2/ - 这就是所谓的《豆壳2》
现在,官方 beanshell 主页位于https://github.com/beanshell/beanshell/releases,最新版本是 2.1.0(不要问我为什么),于 2020 年 12 月发布。
Java Streams 是在 Java 8 中引入到 Java 语言中的,Java 8 是在 Bsh 2.1.8 发布之后于 2014 年 3 月发布的。所以答案是,不,Sailpoint IIQ 目前在其 beanshell 代码中不支持 Java Streams。
但是,您仍然可以将 Java 流封装到某个 jar 中,并且您的 beanshell 代码将能够访问使用该 jar 的方法,就像当前对 IIQ Web 应用程序中的所有 jar 所做的那样。当然,缺点是无法动态更改您的 IIQ 规则代码。
2021 年 7 月,Sailpoint 发布了 IIQ 8.2,这个最新版本仍然使用相同的 Bsh 2.1.8 jar。