有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在Javascript中迭代Java集合

我正在尝试在Java程序中使用Javascript编写脚本。我还没有找到在Javascript中迭代Java集合的方法。如果我为集合调用迭代器()方法,则得到的是方法名而不是元素

下面是一个示例代码:

function getValue(row, components) {
    var apartment = components.get(0);
    var rooms = apartment.getRooms();
    for (var room in rooms.iterator()) {
        println(room);
    }
    return rooms.toString();
}

公寓。getRooms()返回房间的集合。当我研究这个函数返回的值时,我知道它的内容是正确的,但是打印的值是方法名

我从Java程序中调用Javascript,如下所示:

getInvocable().invokeFunction("getValue", row, components);

共 (2) 个答案

  1. # 1 楼答案

    如果我按照如下方式进行迭代:

    function getValue(row, components) {
        var apartment = components.get(0);
        var rooms = apartment.getRelated();
        for (var iterator = rooms.iterator(); iterator.hasNext();) {
            var room = iterator.next();
            println(room);
        }
        return rooms.toString();
    }
    

    它起作用了

  2. # 2 楼答案

    要使用for in,您必须首先转换它to an array

    Collection<String> coll = Arrays.asList("foo", "bar", "baz");
    
    String script = "var arr = coll.toArray();\n"
        + "for(var idx in arr) println(arr[idx]);\n";
    
    ScriptEngine engine = new ScriptEngineManager()
        .getEngineByName("ECMAScript");
    engine.getContext().setAttribute("coll", coll, ScriptContext.ENGINE_SCOPE);
    engine.eval(script);
    

    否则,您将迭代对象属性

    如果您使用的是Rhino 1.7或更高版本,则可以使用其non-standard iterator support

    for (i in Iterator(coll)) print(i);