我知道这是一个老问题,但我想提出 Collections.asList 和 Stream 功能的替代方案。由于问题的标题是“迭代一个枚举”,我认识到有时你想使用一个 lambda 表达式,但一个增强的 for 循环可能更好,因为枚举对象可能抛出一个异常,而 for 循环更容易封装在一个更大的 try-catch 代码段(lambdas 需要声明的异常被捕获在 lambda 中)。为此,这里使用一个 lambda 来创建一个 Iterable,它可以在 for 循环中使用,并且不会预加载枚举:
/**
* Creates lazy Iterable for Enumeration
*
* @param <T> Class being iterated
* @param e Enumeration as base for Iterator
* @return Iterable wrapping Enumeration
*/
public static <T> Iterable<T> enumerationIterable(Enumeration<T> e)
{
return () -> new Iterator<T>()
{
@Override
public T next()
{
return e.nextElement();
}
@Override
public boolean hasNext()
{
return e.hasMoreElements();
}
};
}