有什么方法可以从 loop
返回一个值并从我离开的地方继续吗?
在下面的代码片段中,我想返回 currVm
的当前值。但是我做不到。
在片段的最内层循环中:
while(c <= currVm) {
allocatedVm(currVm);
c++;
}
一个名为allocatedVm
的函数被调用。我想返回 currVm
的值并从我离开的地方重新开始。有什么出路吗?
@Override
public int getNextAvailableVm() {
Set<String> dataCenters = confMap.keySet();
for (String dataCenter : dataCenters) {
LinkedList<DepConfAttr> list = confMap.get(dataCenter);
Collections.sort(list, new MemoryComparator());
int size = list.size() - 1;
int count = 0;
while(size >= 0) {
DepConfAttr dca = (DepConfAttr)list.get(count);
int currVm = dca.getVmCount();
int c = 0;
while(c <= currVm) {
allocatedVm(currVm); // RETURN currVm
c++;
}
count++;
size--;
}
}
}
最佳答案
最好的方法可能是编写一个返回 Iterable<Integer>
的方法。 .这在 Java 中不像在支持生成器函数的语言(例如 C# 和 Python)中那么容易,但它仍然可行。如果代码很短,您可以使用一对(嵌套的)匿名内部类:
public Iterable<Integer> foo() {
return new Iterable<Integer>() {
@Override public Iterator<Integer> iterator() {
return new Iterator<Integer>() {
// Implement hasNext, next and remove here
};
}
};
}
不过,在您的情况下,为了简单起见,我很想将它分成一个单独的非匿名类。
总之,使用的意义Iterable
那是Iterator
吗? 自然而然地 有状态——这基本上就是它的目的。所以它非常适合您的要求。
另一种更简单的方法是一次返回所有 元素,并让调用者按需执行分配。显然,如果可能有大量元素,这种方法效果不佳,但会更容易理解。
关于java - 有什么办法可以从循环中返回一个值并从我离开的地方继续吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18545462/