我用番石榴库生成一个整数的排列1
, 2
和3
。
Collection<List<Integer>> vehCombinations = Collections2.orderedPermutations(vehicles);
接下来,我需要通过迭代vehCombinations
和检查每个排列相对于一些约束:
for (int j=0; j<vehCombinations.size(); j++)
{
List<Integer> veh = vehCombinations.get(i);
}
vehCombinations.get(i)
是不允许的。
所以,我怎么提取排列vehCombinations
?
使用foreach,就像这样:
for(List<Integer> veh : vehCombinations){
veh.doSomething();
}
您可以使用每个语法:
for(List<Integer> veh : vehCombinations) {
// Do stuff
}
采用
for(List<Integer> veh : vehCombinations){
// write your logic
}
有时候,如果你需要编写自己的收藏扩展。 或许,如果你想添加特殊的行为,当元素被添加到列表,或者你想写这实际上是由数据库查询支持的可迭代。 番石榴提供了许多实用工具,使这些任务更容易为你,为我们。
看看这个东西
转发装饰
在这种看看
1. PeekingIterator
List<E> result = Lists.newArrayList();
PeekingIterator<E> iter = Iterators.peekingIterator(source.iterator());
while (iter.hasNext()) {
E current = iter.next();
while (iter.hasNext() && iter.peek().equals(current)) {
// skip this duplicate element
iter.next();
}
result.add(current);
}
2. AbstractIterator
public static Iterator<String> skipNulls(final Iterator<String> in) {
return new AbstractIterator<String>() {
protected String computeNext() {
while (in.hasNext()) {
String s = in.next();
if (s != null) {
return s;
}
}
return endOfData();
}
};
}
3. AbstractSequentialIterator
Iterator<Integer> powersOfTwo = new AbstractSequentialIterator<Integer>(1) { // note the initial value!
protected Integer computeNext(Integer previous) {
return (previous == 1 << 30) ? null : previous * 2;
}
};
或者你可以使用迭代器:
Iterator<List<Integer>> pageIterator = vehCombinations.iterator();
while (pageIterator.hasNext()) {
List<Integer> list = (List<Integer>) pageIterator.next();
}