8

繰り返しで最初のいくつかの要素をスキップしたい。elementsですList<WebElement>。リストを最初からではなく、途中から繰り返し処理したいのですが、どうすればよいですか?

for ( WebElement element : elements )
{
      //block of code
}
4

5 に答える 5

17

の特定の範囲何らかの操作を適用したい多くの場合、以下を使用できます。ListsubList()

for (WebElement element : elements.subList(3, 7)) {
  // do stuff
}

これは、一部の範囲を削除する場合にも正常に機能します。

myList.subList(4, 14).clear();

subListにのみ存在するListため、これはまたはSetその他の非リストCollectionオブジェクトでは機能しないことに注意してください。

于 2013-01-21T12:46:56.650 に答える
10

がリストの場合elements、listIterator、具体的にはメソッドを使用できますelements.listIterator(index)。の要素から始まるリスト反復子を返しますindex

例えば:

for(ListIterator iter = elements.listIterator(2);iter.hasNext;) {
  WebElement element = (WebElement)iter.next;
  ...
}

がリストでない場合elementsでも、コレクションのコンテンツを含む新しいリストを作成することで、そのアプローチを使用できます。

于 2013-01-21T12:45:06.863 に答える
5

この例のように List.listIterator(int) を使用できます

    List<WebElement> list = ...
    for(Iterator<WebElement> i = list.listIterator(1); i.hasNext();) {
        WebElement next = i.next();
    }

または単に

for(int i = 1; i < list.size(); i++) {
     WebElement e = list.get(i);
}

#1 は LinkedList の方が高速で、#2 は ArrayList の方が高速であることに注意してください。特定の List に対してどちらのバージョンがより効率的かを判断するための特別なマーカー インターフェース java.util.RandomAccess があります。

于 2013-01-21T12:46:19.503 に答える
2

最も単純で最も簡単な方法を使用しないのはなぜですか?

int i = 0;
for (WebElement element : elements)
{
      if (/*i++ satisfies some condition*/) {
          //block of code
      }
}

または、よりネイティブな方法:拡張されていないforループでインデックスを追跡します。

サブリストを作成するような他の方法はより魅力的に見えますが、それはより多くの時間とスペースを必要とします。

于 2013-01-21T12:53:18.680 に答える
0

参照したい場合、またはいわば独自に作成したい場合は、配列リストを使用できます。これにより、(配列のように)参照によってポイントにアクセスできるようになり、最後まで汎用のwhile(node.hasNext()){...}を繰り返し処理できます。

于 2013-01-21T12:54:43.177 に答える