我有一个迭代器 - 放在我的集合中间的某个地方。
我想从那里开始遍历集合,如果找到它就返回一个特殊元素。
如果我到达 !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/