Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Neo4j Iterable<;字符串>;getPropertyKeys()无限循环?这是虫子吗?_Java_Neo4j_Iterable_Embedded Database - Fatal编程技术网

Java Neo4j Iterable<;字符串>;getPropertyKeys()无限循环?这是虫子吗?

Java Neo4j Iterable<;字符串>;getPropertyKeys()无限循环?这是虫子吗?,java,neo4j,iterable,embedded-database,Java,Neo4j,Iterable,Embedded Database,我只是试图从关系中复制属性键。如果我使用这个代码 Iterable<String> tempkeys; tempkeys= rel.getPropertyKeys(); while (tempkeys.iterator().hasNext()){ String key = tempkeys.iterator().next(); System.out.println(key);

我只是试图从关系中复制属性键。如果我使用这个代码

        Iterable<String> tempkeys;
        tempkeys=  rel.getPropertyKeys();
        while (tempkeys.iterator().hasNext()){
            String key = tempkeys.iterator().next();
            System.out.println(key);
        }
Iterable临时键;
tempkeys=rel.getPropertyKeys();
while(tempkeys.iterator().hasNext()){
String key=tempkeys.iterator().next();
系统输出打印项次(键);
}
它无限循环。如果我将Iterable重铸为Arraylist,那么它将完美工作

        ArrayList<String> tempkeys;
        tempkeys= (ArrayList<String>) rel.getPropertyKeys();
        for (int i=0;i<=tempkeys.size();i++) {
            String key = tempkeys.iterator().next();
            System.out.println(key);
        }
ArrayList临时键;
tempkeys=(ArrayList)rel.getPropertyKeys();

对于(int i=0;i您可以在循环的每次迭代中使用一个新的迭代器,这意味着
tempkeys.iterator().hasNext()
始终返回
true
String key=tempkeys.iterator().next();
始终返回第一个元素

您应该在循环外创建一次迭代器,并在每次调用
next()
hasNext()
时使用相同的迭代器

Iterable临时键;
tempkeys=rel.getPropertyKeys();
迭代器iter=tempkeys.Iterator();
while(iter.hasNext()){
String key=iter.next();
系统输出打印项次(键);
}

顺便说一句,您的第二个循环(for循环)虽然没有生成无限循环,但仍然是错误的,因为它将在每次迭代中返回列表的第一个元素。

谢谢,奇怪的是,主代码Iterable oldlinks=entity.getrelations(Direction.INCOMING)中有一个等价的循环;而(oldlinks.iterator().hasNext()){temprel=oldlinks.iterator().next();}工作得很好。为什么有些迭代器是由代码重新创建的,而另一些迭代器不是呢?第二个循环当然被错误地编辑了,并且确实生成了正确的代码。在实际代码中,它读取newtemprel.setProperty(tempkeys.get(i)、temprel.getProperty(tempkeys.get(i));或者在上面的代码中相等地使用Steing key=tempkeys.get(i);
    try (Transaction tx = this.graphDb.beginTx()) {
        Node Node1 = JavaCluster.AddUniqueNode("Element", "Name", "Node1");
        Node Node2 = JavaCluster.AddUniqueNode("Element", "Name", "Node2");
        RelationshipType tt = DynamicRelationshipType.withName("rt");
        Relationship rel = Node1.createRelationshipTo(Node2, tt);
        rel.setProperty("prop1", "propval1");
        rel.setProperty("prop2", "propval2");
        ArrayList<String> tempkeys;
        tempkeys= (ArrayList<String>) rel.getPropertyKeys();
        for (int i=0;i<=tempkeys.size();i++) {
            String key = tempkeys.iterator().next();
            System.out.println(key);
        }
        tx.success();
    } catch (Exception e) {
        System.out.println("Error - exception " + e.toString());
        //throw new TransactionFailException("Transaction failed",e);

    }
    Iterable<String> tempkeys;
    tempkeys = rel.getPropertyKeys();
    Iterator<String> iter = tempkeys.iterator();
    while (iter.hasNext()) {
        String key = iter.next();
        System.out.println(key);
    }