12

セットを無期限に反復する最も簡単な方法、つまり最後に到達するとnext();最初のオブジェクトを呼び出す方法を考えていました。これは Java で既に定義済みの関数ではないと想定しているため、これを Java で実装する最も簡単な方法を探しています。

4

8 に答える 8

41

これを行う優れたGoogle Collectionsライブラリには、次のメソッドがあります。

Set<String> names = ...;
Iterable<String> infinite = Iterables.cycle(names);

(Google Collections ライブラリを強くお勧めすることはできません。非常に強力です。私は Google で働いているので偏見がありますが、Java を書いているほとんどすべての Google 社員は、コレクションがいかに便利であるかを教えてくれると思います。)

于 2009-06-19T06:47:04.157 に答える
6
Iterator it = mylist.iterator();
while (it.hasNext())
{
  MyType t = (MyType)it.next();

  // do something

  if (!it.hasNext())
    it = mylist.iterator();
}
于 2009-06-19T11:55:25.367 に答える
1

イテレータを作成している場合は、次のメソッドで、リストに別のオブジェクトがあるかどうかを確認する if 条件を指定できます。ある場合はそのオブジェクトを返し、ない場合はリストの先頭に戻ってそのオブジェクトを返します。

于 2009-06-19T06:31:09.563 に答える
1

これは私が考えることができるものです...

iterator = set.getIterator
//other code
if (iterator.hasNext())
    //do code here
else
    iterator = set.getIterator();
于 2009-06-19T06:32:11.027 に答える
0

あなたが望んでいることは決して助けにはならないと思います。イテレータを使って簡単に何でもできますが、このスタイルでは使用されない新しいものを追加する場合は注意が必要ですが、これはあなたが望むものです:

if (! It.hasNext() ) { while ( It.hasPrevious() ) { It = It.Previous(); } } else { It = It.Next(); }

This way is nothing if your really interested you should instead make next pointer of the last to the first always when pushing a new list.

于 2010-04-21T21:51:18.427 に答える