2017-09-26 4 views
4

J'ai une Java HashMap que j'ai transmise au moteur de script. Je souhaite supprimer les entrées au fur et à mesure qu'elles sont traitées car je signalerai des clés non valides plus tard. La méthode habituelle apparente pour supprimer des entrées (delete testMap['key'];) n'a aucun effet.Comment supprimer un élément de Java Map depuis Nashorn JavaScript

Comment faire passer ce test?

@Test 
public void mapDelete() throws ScriptException{ 
    Map<String,String> map = new HashMap<>(1); 
    map.put("key","value"); 

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); 
    engine.getContext().getBindings(ScriptContext.GLOBAL_SCOPE).put ("testMap", map); 
    engine.eval("delete testMap['key'];"); 
    Assert.assertEquals (0, map.size()); 
} 

Répondre

3

Si vous savez que vous avez un HashMap, vous pouvez utiliser son Map API dans les Nashorn, i.e. .:

@Test 
public void mapDelete() throws ScriptException { 
    Map<String,String> map = new HashMap<>(1); 
    map.put("key","value"); 

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); 
    engine.getContext().getBindings(ScriptContext.GLOBAL_SCOPE).put ("testMap", map); 
    engine.eval("testMap.remove('key');"); 
    Assert.assertEquals (0, map.size()); 
} 
+0

Parfait! Je vous remercie. –