Java 如何遍历列表并在到达末尾时返回到第一个元素?
所以我有一个对象列表。我想用ListIterator遍历它们,但我希望.next()在到达末尾时返回第一个元素,并继续遍历列表。可能吗Java 如何遍历列表并在到达末尾时返回到第一个元素?,java,list,loops,Java,List,Loops,所以我有一个对象列表。我想用ListIterator遍历它们,但我希望.next()在到达末尾时返回第一个元素,并继续遍历列表。可能吗 ListIterator<Post> postsIterator = posts.listIterator(); //posts only has 3 elements for (int i = 0; i < 15; i++) { System.out.println(postsIterator.next().getText()); }
ListIterator<Post> postsIterator = posts.listIterator(); //posts only has 3 elements
for (int i = 0; i < 15; i++)
{
System.out.println(postsIterator.next().getText());
}
ListIterator postsIterator=posts.ListIterator()//posts只有3个元素
对于(int i=0;i<15;i++)
{
System.out.println(postsIterator.next().getText());
}
ListIterator it=posts.ListIterator();
对于(int i=0;i<15;i++){
it=it.hasNext()?it:it.listIterator();
System.out.println(it.next().getText());
}
ListIterator it=posts.ListIterator();
对于(int i=0;i<15;i++){
it=it.hasNext()?it:it.listIterator();
System.out.println(it.next().getText());
}
您需要将列表迭代器
重置为索引,0
一旦到达末尾
演示:
import java.util.List;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
List<String> list = List.of("A", "B", "C");
ListIterator<String> itr = list.listIterator();
for (int i = 0; i < 15; i++) {
if (!itr.hasNext()) {
itr = list.listIterator();
}
System.out.print(itr.next() + "\t");
}
}
}
A B C A B C A B C A B C A B C
当列表迭代器到达末尾时,需要将其重置为索引
0
演示:
import java.util.List;
import java.util.ListIterator;
public class Main {
public static void main(String[] args) {
List<String> list = List.of("A", "B", "C");
ListIterator<String> itr = list.listIterator();
for (int i = 0; i < 15; i++) {
if (!itr.hasNext()) {
itr = list.listIterator();
}
System.out.print(itr.next() + "\t");
}
}
}
A B C A B C A B C A B C A B C
您可以使用一些流魔法来创建一个迭代器,该迭代器实际上可以永远运行:
List<String> strings = Arrays.asList("one", "two", "three");
Iterator<String> it = Stream.generate(() -> strings).flatMap(List::stream).iterator();
for (int i = 0; i < 15; ++i) {
System.out.println(it.next());
}
您可以使用一些流魔法来创建一个迭代器,该迭代器实际上可以永远运行:
List<String> strings = Arrays.asList("one", "two", "three");
Iterator<String> it = Stream.generate(() -> strings).flatMap(List::stream).iterator();
for (int i = 0; i < 15; ++i) {
System.out.println(it.next());
}
为什么不简单地跟踪迭代变量呢?像这样:
ListIterator postsIterator=posts.ListIterator()//posts只有3个元素
对于(int i=0;i
如果您坚持要硬编码阈值15
,则:
ListIterator postsIterator=posts.ListIterator()//posts只有3个元素
对于(int i=0;i<15;i++){
如果(!postsIterator.hasNext())postsIterator=posts.listIterator();
Post Post=postsIterator.next();
System.out.println(post==null?“:post.getText());
}
为什么不简单地跟踪迭代变量?像这样:
ListIterator postsIterator=posts.ListIterator()//posts只有3个元素
对于(int i=0;i
如果您坚持要硬编码阈值15
,则:
ListIterator postsIterator=posts.ListIterator()//posts只有3个元素
对于(int i=0;i<15;i++){
如果(!postsIterator.hasNext())postsIterator=posts.listIterator();
Post Post=postsIterator.next();
System.out.println(post==null?“:post.getText());
}
只有12
元素(而不是15
)@oleg.cherednik-感谢您指出这一点。现在更正。只有12
元素(不是15
)@oleg.cherednik-感谢您指出这一点。现在更正它。你不需要做'i-=2'吗,因为它被i++抵消了吗?当i
到达size()-1
时,我们首先获取元素,然后重置i
。我不确定我是否完全理解你的意思。你不需要做'I-=2'吗,因为它被I++抵消了吗?当I
达到size()-1
时,我们首先获取元素,然后重置I
。我不确定我是否完全理解你的意思。()->strings
需要一些解释。因此()->strings
是一个供应商lambda表达式。执行它的结果是字符串
列表。然后,flatMap(List::stream)
将列表转换为流,然后作为迭代器返回。请参见Javadoc中的流。此处生成(…)
:()->strings
需要一些解释。因此()->strings
是一个供应商lambda表达式。执行它的结果是字符串
列表。然后,flatMap(List::stream)
将列表转换为流,然后作为迭代器返回。请参见Javadoc中的流。在此处生成(…)
: