通过访问集合 (Iterate through Collection>)

2019-09-28 00:02发布

我用番石榴库生成一个整数的排列123

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

Answer 1:

使用foreach,就像这样:

for(List<Integer> veh : vehCombinations){
    veh.doSomething();
}


Answer 2:

您可以使用每个语法:

for(List<Integer> veh : vehCombinations) {
  // Do stuff
}


Answer 3:

采用

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


Answer 4:

或者你可以使用迭代器:

Iterator<List<Integer>> pageIterator = vehCombinations.iterator();
    while (pageIterator.hasNext()) {
        List<Integer> list = (List<Integer>) pageIterator.next();
    }


文章来源: Iterate through Collection>