我有一个集合Collection<RECOBeacon> recoBeacons
第一个元素是RECOBeacon first = recoBeacons.iterator().next();
获得的,但是我无法获得第二个元素。我尝试了RECOBeacon second = first.next();
和second = first.iterator().next()
,但这些都没有奏效。有人知道如何解决这个问题吗?
谢谢!
答案 0 :(得分:5)
您必须使用相同的迭代器来获取第一个和第二个元素:
Iterator<RECOBeacon> iter = recoBeacons.iterator();
RECOBeacon first = iter.next();
RECOBeacon second = iter.next()
最好在每次调用iter.hasNext()
之前致电iter.next()
,以避免在Collection
少于两个元素时出现异常。
答案 1 :(得分:5)
如果您使用的是Java8,则可以使用Stream:
RECOBeacon second = recoBeacons.stream().skip(1).findFirst().orElse(null);
这个解决方案的好处是findFirst返回一个Optional,所以你不必像使用迭代器那样进行hasNext检查。
另请注意,Collection接口不保证顺序,因此获取第n个元素可能会产生意外结果。
答案 2 :(得分:0)
除了@Eran的答案之外,您通常使用Iterator
来迭代整个集合。在你的情况下,如果你想获得第3,第4 ......元素,你会怎么做?然后你可以使用迭代器循环。
Iterator<RECOBeacon> iter = recoBeacons.iterator();
while(iter.hasNext()) {
RECOBeacon nextBeacon = iter.next();
// do something with nextBeacon
}
在这里,hasNext()
会阻止你的迭代器运行到NoSuchElementException
并导致在它到达集合结束时突破循环。