Опираясь на Nashorn, как предложено в Как преобразовать строку в лямбда-выражение? , вы можете определить метод для построения Predicate
из кода JavaScript:
public Predicate<Object> convertJSToPredicate(String js) throws ScriptException {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
return (Predicate<Object>) engine.eval("new java.util.function.Predicate(function(t) " + js + ")");
}
и затем используйте его как:
String dynamicGetter = "t.getAge() != null";
Stream<PoliceShooting> averageAge = peopleShot.stream()
.filter(convertJSToPredicate(dynamicGetter));
Конечно dynamicGetter
должен быть JavaScript, а не кодом Java, и может обращаться к переданному объекту через переменную t
.
Примечаниечто Нашорн устарел в Java 11 .Я бы предположил, что альтернативные реализации придут.