我有以下代码:
...
Transaction xodusTransaction = xodusEnvironment.beginReadonlyTransaction();
Store leftStore = xodusEnvironment.openStore(leftName, StoreConfig.USE_EXISTING, xodusTransaction, false);
Store rightStore = xodusEnvironment.openStore(rightName, StoreConfig.USE_EXISTING, xodusTransaction, false);
try(Cursor leftCursor = leftStore.openCursor(xodusTransaction);
Cursor rightCursor = rightStore.openCursor(xodusTransaction)) {
while(leftCursor.getNext()) {
while(rightCursor.getNext()) {
// Do actual work with data from both stores
}
}
}
...
我希望内部循环将触发N * M次,其中N-leftStore的基数,M-rightStore的基数。
在实践中,外部循环仅触发一次,内部循环触发M次。
如果我按以下方式重写代码(讨人喜欢的嵌套循环):
...
while(leftCursor.getNext()) {
...
}
while(rightCursor.getNext()) {
...
}
...
然后,这两个循环都会按预期对leftStore触发N次,为rightStore触发M次。
问题是:是否可以使嵌套游标移动?如果是,请指导我。
谢谢!
-塔拉斯
答案 0 :(得分:0)
一旦cursor.getNext()
返回false
(不存在 next 键/值对),它将永远不会为该Cursor实例返回true
。要再次遍历商店,请重新打开光标。
以下是代码以矩阵形式遍历两个商店,即两个商店中键/值对的所有成对组合:
try (Cursor leftCursor = leftStore.openCursor(txn)) {
while (leftCursor.getNext()) {
try (Cursor rightCursor = rightStore.openCursor(txn)) {
while (rightCursor.getNext()) {
// Do actual work with data from both stores
}
}
}
}