2016-07-08 5 views
0

Comment créer un prédicat à partir de ScriptEngine dans java 8 et le renvoyer au programme Java?Comment créer et renvoyer Prédicat <T> à partir du moteur Nashorn java 8

Les conditions de prédicat sont des opérateurs et leurs valeurs de comparaison et sont bonnes en nombre. Alors, je voulais obtenir le prédicat de quelque chose comme moteur javaScript ci-dessous:

public Predicate<Object> getPredicate(String operator, String value) { 
return Predicate<Object> engine.eval("(i)-> i" + operator + value); 
} 

opérateur ici peut être> =, < =,>, etc. < ceci est juste une version plus simple du problème réel. Comment puis-je créer des prédicats de nashorn, je serai capable de conduire après cela.

Répondre

0

Cela devrait fonctionner:

engine.eval("new java.util.Predicate(function(i) { return i" + operator + value + ";})"); 

, je pense aussi dans votre message original que vous ne vouliez pas citer "value".

1

Je pense à quelque chose comme ceci:

public Predicate<Object> getPredicate(final String operator, final String value) { 
    return i -> { 
    Bindings bindings = new Bindings(); 
    bin.put("i", i); 
    bin.put("value", value); 
    return engine.eval("i " + operator + " value", bindings); 
    }; 
} 
+0

Il est dit "Impossible d'instancier les liaisons de type" pour les nouvelles liaisons() – Ajeetkumar