我试图使用:
遍历Tile()类的TreemapMap map = new TreeMap();
Iterator itr = world.map.values().iterator();
while(itr.hasNext()){
Tile t = ???;
System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}
如何在迭代器中获取对象Tile的实例?或者如果有更好的方法,请告诉我。
我已经尝试使用谷歌搜索,但我总是最终想方设法迭代纯数据,比如字符串等,而不是类的'Instanciations'......
答案 0 :(得分:2)
Tile t = (Tile) itr.next();
但请注意,使用迭代器尤其是原始集合是编写Java的一种非常过时的方式。更好的是使用类型集合和增强的for循环:
Map<String, Tile> map = new TreeMap<String, Tile>();
for(Tile t : map.values()){
System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}
答案 1 :(得分:2)
字符串不是Java中的纯数据,它们是对象,所以是相同的:
Map map = new TreeMap();
Iterator itr = world.map.values().iterator();
while(itr.hasNext()){
Tile t = (Tile)itr.next();
System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}
或更好:
Map<Key, Tile> map = new TreeMap<Key, Tile>();
Iterator<Tile> itr = world.map.values().iterator();
while(itr.hasNext()){
Tile t = itr.next();
System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}
甚至更好:
Map<Key, Tile> map = new TreeMap<Key, Tile>();
for(Tile t : map.values){
System.out.print(t.xCord+","+t.yCord+","+t.zCord);
}
p.s Key
是您正在使用的关键对象的类
答案 2 :(得分:1)
itr.next()
给出了javadocs中指定的下一个元素的实例。请注意,由于您的Map是原始类型,因此您需要使用强制转换:Tile t = (Tile)itr.next();
,但它不是类型安全的。
更好的解决方案是使用泛型,如@Simone建议
答案 3 :(得分:0)
在迭代器中使用
while(itr.hasNext()){
Tile t = itr.next(); ...
但是,除非你给出了带有泛型的类型,否则你还必须强制转换它:
Map<Whatever,Tile> map = new TreeMap<Whatever,Tile>();
Iterator<Tile> itr = world.map.values().iterator();
否则必须抛出迭代器值 - 即你必须更正你的例子(以及上面的行)
while(itr.hasNext()){
Tile t = (Tile)itr.next(); ...
答案 4 :(得分:0)
在循环中,使用itr.next()
从Tile
中检索下一个Iterator
对象。目前,这将返回Object
,因为您使用的是原始类型的TreeMap
。而是使用TreeMap<Key, Tile>
,以便迭代器的值为Iterator<Tile>
。
答案 5 :(得分:0)
Tile t = (Tile) itr.next()
这将为您提供该类的下一个实例,并将迭代器移动到下一个实例。