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