Java 将枚举转换为迭代器
我在工作表中遇到了一个问题,即创建一个适配器来将枚举转换为迭代器。当我尝试运行以下代码时,我得到一个空指针异常Java 将枚举转换为迭代器,java,iterator,nullpointerexception,enumeration,Java,Iterator,Nullpointerexception,Enumeration,我在工作表中遇到了一个问题,即创建一个适配器来将枚举转换为迭代器。当我尝试运行以下代码时,我得到一个空指针异常 import java.util.Vector; import java.util.Arrays; import java.util.Enumeration; import java.util.Iterator; public class ConvertEnumeration { public static void main(String [] args) {
import java.util.Vector;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;
public class ConvertEnumeration {
public static void main(String [] args) {
int [] ourArray = {0,1,2,3,4,5,6,7,8,9};
Vector vector = new Vector(Arrays.asList(ourArray));
//Get Enumerator
Enumeration enumerator = vector.elements();
EnumerationToIterator enumToIt = new EnumerationToIterator(enumerator);
while(enumToIt.hasNext()) {
System.out.println(enumToIt.next());
}
}
}
//Convert our enumeration to Iterator!
class EnumerationToIterator implements Iterator {
//Our enumeration
Enumeration enmueration;
//Constructor
public EnumerationToIterator(Enumeration enmueration){
enmueration = this.enmueration;
}
//Our Methods
public boolean hasNext(){
return enmueration.hasMoreElements();
}
public Object next(){
return enmueration.nextElement();
}
public void remove(){
throw new UnsupportedOperationException();
}
}
另一点需要注意的是,在我首先创建了int之后,我无法从枚举中打印出int。构造函数中的赋值错误。它需要
this.enmuation=enmuation代码>
enmuation
是构造函数参数,而this.enmuation
是对象属性。公共类枚举{
public class ConvertEnumeration {
public static void main(String [] args) {
// int [] ourArray = {0,1,2,3,4,5,6,7,8,9};
Vector<Integer> vector = new Vector<Integer>(Arrays.asList(0,1,2,3,4,5,6,7,8,9));
//Get Enumerator
Enumeration<Integer> enumerator = vector.elements();
EnumerationToIterator<Integer> enumToIt = new EnumerationToIterator<Integer>(enumerator);
while(enumToIt.hasNext()) {
System.out.println(enumToIt.next());
}
}
}
//Convert our enumeration to Iterator!
class EnumerationToIterator<T> implements Iterator<T> {
//Our enumeration
Enumeration<T> enmueration;
//Constructor
public EnumerationToIterator(Enumeration<T> enmueration){
this.enmueration = enmueration;
}
//Our Methods
public boolean hasNext(){
return enmueration.hasMoreElements();
}
public T next(){
return enmueration.nextElement();
}
public void remove(){
throw new UnsupportedOperationException();
}
}
公共静态void main(字符串[]args){
//int[]ourArray={0,1,2,3,4,5,6,7,8,9};
向量=新向量(Arrays.asList(0,1,2,3,4,5,6,7,8,9));
//获取枚举器
枚举数=vector.elements();
EnumerationToInterator enumToIt=新的EnumerationToInterator(枚举器);
while(enumToIt.hasNext()){
System.out.println(enumToIt.next());
}
}
}
//将枚举转换为迭代器!
类EnumerationToIterator实现迭代器{
//我们的列举
计数加密;
//建造师
公共枚举到迭代器(枚举操作){
这个。enmuation=enmuation;
}
//我们的方法
公共布尔hasNext(){
返回enmuation.hasMoreElements();
}
公共交通工具{
返回enmuation.nextElement();
}
公共空间删除(){
抛出新的UnsupportedOperationException();
}
}
Java 5及更高版本
不需要重新发明轮子。只需使用Collections.list(枚举e)
,它返回一个ArrayList
。然后使用ArrayList.iterator()
获取迭代器
Java9及更高版本
现在要直接转换为迭代器的枚举:
enumeration.asIterator();
Java9提供了一个新的默认方法:Iterator asiiterator()
啊,学童错误,谢谢!!快速提问,消除了错误,但当我尝试打印原始值时,它只打印一个内存地址(我想),例如“[I@38f0b51d“。尝试转换为int时会出现以下错误:“System.out.println();
?System.out.println(enumToIt.next())中的内容无法转换为java.lang.Integer”;给出垃圾,System.out.println((int)enumToIt.next())给出error@jlordo:仅供参考,您的编辑被拒绝,因为它更改了原始帖子的代码。而不是编辑原始帖子(buggy)代码,您应该编辑您的答案以包含适当修改的代码。是的,我理解其动机。不幸的是,编辑原始代码以修复bug也可能使问题本身无效。因此,建议的方法是将相关部分复制并修改到您自己的帖子中。HTH,谢谢您的回答!添加泛型类型在您的主类帮助中?请参阅我的更新答案。仍然没有运气,行“Vector Vector=new Vector(Arrays.asList(ourArray));”给出错误,“构造函数向量(List)未定义”一个适配器是一个更好的选择,因为元素的数量可能是巨大的,一个<代码> ARAYLISTA/COD>所有元素都会增加内存消耗。@ CythulLangRIM仅仅因为有更好的情况,所以它不会更好。这个答案对于大多数用途来说是非常好的。接受答案?它的得票数是接受答案的近10倍,而这个问题是java enumeration to iterator
的顶级搜索结果之一,因此让主要答案更能概括大多数开发人员的需求可能会更好。原始问题的重点是我自己如何做另一个答案有更多的赞成票,但它没有解决我所问的问题。