Java Iterator循环一次,从中间开始

标签 java loops collections iterator

我有一个迭代器 - 放在我的集合中间的某个地方。

我想从那里开始遍历集合,如果找到它就返回一个特殊元素。

如果我到达 !hasNext() 那么我想从头开始,但如果我到达我最先开始的地方我想停下来。

目前解决该问题的最佳想法似乎是保存“第一个”(迭代器在我开始时指向的任何地方)元素,然后在我再次找到该元素时停止。

只要项目在我的集合中(即在 HasSet 中)只能出现一次,这就有效。

关于如何做这样的事情有更好的想法吗?迭代器似乎没有向我提供可以比较的指针/数字。

最佳答案

使用 Guava 迭代器(Java 7):

Iterator<YourType> iterator = Iterators.concat(yourIteratorPlaceSomewhereInMiddle, Iterators.limit(yourCollection.iterator(), positionOfSomewhereInMiddle));

使用流(Java 8):

Optional<YourType> theAnswer = IntStream.iterate(positionOfSomewhereInMiddle, pos -> ++pos)
                                        .map(pos -> pos % sizeOfCollection)
                                        .mapToObj(yourCollection::get)
                                        .limit(sizeOfCollection)
                                        .filter(element -> element is 42)
                                        .findFirst();

关于Java Iterator循环一次,从中间开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47183841/

相关文章:

java - 屏幕旋转后Resume flowable转为实时数据

java - console.readLine() 和 console.format() : What is meant by arguments referenced by format specifiers?

c# - 如何简化 CPU 密集型 For 循环 C#

c++ - 在 C++ 中,如何找到直接或间接链接到数组特定元素的数组的所有元素?

python - 为什么 collections.MutableSet 不提供更新方法?

java - 如何使用两个数字作为映射键

java - Protocol Buffer : extension registry issue

java - 下载 OpenCV Manager 后尝试在 android 上运行 OpenCV 时未发现非 native OpenCV 库包错误

Python 3.6 : Looping through files in os. listdir() 并将其中一些写入文本文档

支持获取、设置和删除某些索引的 java arraylist 的 C# 等价物