gpt4 book ai didi

java - Neo4j Iterable getPropertyKeys() 无限循环?这是一个错误吗?

转载 作者:行者123 更新时间:2023-11-30 08:55:40 24 4
gpt4 key购买 nike

我只是想从关系中复制属性键。如果我使用此代码。

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

无限循环。如果我将 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);
}

如果我调试代码,很明显可迭代计数器在每次调用 .next() 后重置为 0。它在调用期间递增到 1,但在下一次调用 .hasNext() 时返回到 0。

上下文如下。

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

}

最佳答案

您在循环的每次迭代中创建一个新的迭代器,这意味着 tempkeys.iterator().hasNext() 总是返回 trueString key = tempkeys.iterator().next(); 总是返回第一个元素。

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

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

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

关于java - Neo4j Iterable<String> getPropertyKeys() 无限循环?这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28911350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com