如何在Javascript中遍历Java集合

How to iterate through Java collection in Javascript

本文关键字:遍历 Java 集合 Javascript      更新时间:2023-09-26

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

下面是一个示例代码:

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

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

我从Java程序中调用Javascript,像这样:

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

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

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();
}

要使用for in,您必须首先将其转换为数组:

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或更高版本,你可以使用它的非标准迭代器支持:

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