我不明白为什么我的hasPrevious迭代器不起作用,它看起来像这样:
public void previousSong(){
Iterator<Song> iterator = songs.iterator();
if(iterator.hasPrevious()) {
System.out.println(iterator.previous().toString());
}
}
我有另一个使用hasNext()的函数,它可以工作,但是这个不会。
public void nextSong(){
Iterator<Song> iterator = songs.iterator();
if(iterator.hasNext()) {
System.out.println(iterator.next().toString());
}
}
我不确定这种方法是否已经存在,但是当我研究它时,Java网站就会提到它。我不明白为什么它不起作用。
答案 0 :(得分:3)
仅为ListIterators(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ListIterator.html)定义hasPrevious
和previous
方法,这是Iterator的子接口。由于您只使用Iterator,因此唯一定义的方法是hasNext()
,next
和remove
- 请参阅此处:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Iterator.html。
答案 1 :(得分:0)
只有ListIterator
可以向后走。正常的Iterator
类不能。
因此,如果您使用ListIterator
代替Iterator
,那么它将起作用:)
答案 2 :(得分:0)
应该是这样的:
public void previousSong(){
ListIterator<Song> it = songs.listIterator();
while(it.hasNext()) {
System.out.println(it.next().toString());
}
// and now you can use hasprevious()
while(it.hasPrevious()) {
System.out.println(it.previous().toString());
}
}
答案 3 :(得分:0)
// Create an array list
ArrayList list = new ArrayList();
// add elements to the array list
list.add("C++");
list.add("Java");
list.add("Php");
list.add("Python");
list.add("Ruby");
list.add("Perl");
//Create the object of ListIterator through listIterator() method
ListIterator object=list.listIterator();
// Modify the list element
while(object.hasNext()) {
String language=(String) object.next() ;
object.set(language+"+");
}
// Show element in pervious order
while(object.hasPrevious()) {
System.out.println(object.previous());
}
它应该首先在向前方向然后在向后方向上实现。
答案 4 :(得分:0)
在此接口中不使用迭代器hasPrevious()函数未定义 使用ListIterator
ListIterator lt =al.listIterator(al.size());
while(lt.hasPrevious())
{
System.out.println(lt.previous());
}
这将进入收集对象的最后一个位置