当你在ListIterator之后使用next()然后使用previous()将返回列表中的相同元素时,我怎么能这样做呢?如果我一个接一个地使用它会跳过当前元素并转到下一个元素?我尝试使用两个按钮在月份列表和我当前的代码之间来回滚动,如果我按下,我想回去,我需要按两次。
Label monthLabel = new Label(month);
intoHbox.setConstraints(monthLabel, 1, 0);
intoHbox.setConstraints(prevMonth, 0, 0);
LinkedList<String> year = new LinkedList();
year.add("January");
year.add("February");
year.add("March");
year.add("April");
year.add("May");
year.add("June");
year.add("July");
year.add("August");
year.add("September");
year.add("October");
year.add("November");
year.add("December");
//make the current month the starting position
int position = 0;
for (String monthNow : year){
if(monthNow.contains(month)){
break;
}
else{
position++;
}
}
ListIterator<String> it = year.listIterator();
it = year.listIterator(position + 1);
positionInList = it;
nextMonth.setOnAction(e -> {
if (positionInList.hasNext()){
String currentLabel = positionInList.next();
monthLabel.setText(currentLabel);
}
else{
positionInList = year.listIterator(0);
monthLabel.setText(positionInList.next());
}
});
prevMonth.setOnAction(e -> {
if (positionInList.hasPrevious()){
monthLabel.setText(positionInList.previous());
}
else{
positionInList = year.listIterator(12);
monthLabel.setText(positionInList.previous());
}
});
答案 0 :(得分:0)
将当前位置存储在变量中并直接使用它可能更简单。
创建一个小的实用程序类,如果它不是最终的,那么你也可以帮助修改lambda中的int。您可以将其设为私有,并将其直接包含在您的主类中。
private static class Position {
private final List<String> year;
private int position;
Position(List<String> year, String current) {
this.year = year;
this.position = year.indexOf(current);
if (this.position == -1) throw new IllegalArgumentException("Not a valid month: " + current);
}
String next() {
++position;
if (position >= year.size()) position = 0;
return year.get(position);
}
String previous() {
--position;
if (position < 0) position = year.size() - 1;
return year.get(position);
}
}
然后在您的方法中,您可以使用:
Position position = new Position(year, month);
nextMonth.setOnAction(e -> monthLabel.setText(position.next());
prevMonth.setOnAction(e -> monthLabel.setText(position.previous());
另请注意,在这种情况下使用ArrayList
会更有效率,因为它支持O(1)中的随机访问 - 尽管对于这么小的列表,差异会很小。