コレクションに関する簡単な質問があります。 Set<String>
オブジェクト。そのセット内の文字列の列挙が必要です。最もクリーンで最適な方法は何ですか?
編集:独自に作成する必要はありません(ただし、実装は後世のために残しておきます)-JDKに対するKevin Bourrillionの回答を参照してください。
really列挙が必要な場合、以下を使用できます。
Enumeration<String> x = new Vector(set).elements();
ただし、可能な場合はIterable<E>
を使用することをお勧めします...
より良い代替方法は、Iterator<E>
の周りに小さなラッパークラスを記述することです。そうすれば、Enumeration<E>
の実装を見つけるためだけにコピーを取る必要がなくなります。
import Java.util.*;
class IteratorEnumeration<E> implements Enumeration<E>
{
private final Iterator<E> iterator;
public IteratorEnumeration(Iterator<E> iterator)
{
this.iterator = iterator;
}
public E nextElement() {
return iterator.next();
}
public boolean hasMoreElements() {
return iterator.hasNext();
}
}
public class Test {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
Enumeration<String> x = new IteratorEnumeration<String>(set.iterator());
}
}
Java.util.Collections.enumeration(set)
Javadoc
指定されたコレクションの列挙を返します。これにより、入力として列挙を必要とするレガシーAPIとの相互運用性が提供されます。
数学的な意味で列挙を意味すると仮定すると、これを行う最もクリーンな方法は、Iterable
を実装するすべてのクラスに適用可能なforループを使用することです。
_Set<String> strs = ...
for (String s : strs) {
...
}
_
本当にEnumeration
が必要な場合は、iterator()
を呼び出して返されるIterator
をラップするアダプタークラスを実装できます。 Apache Collectionsライブラリにはアダプタークラスがあります: IteratorEnumeration
。
または、GoogleのGuavaライブラリを使用できます。
_Set<String> mySet = ...
Enumeration<String> = Iterators.asEnumeration(mySet.iterator());
_