如何获得集合的第二个元素?

时间:2017-05-18 07:56:36

标签: java

我有一个集合Collection<RECOBeacon> recoBeacons第一个元素是RECOBeacon first = recoBeacons.iterator().next();获得的,但是我无法获得第二个元素。我尝试了RECOBeacon second = first.next();second = first.iterator().next(),但这些都没有奏效。有人知道如何解决这个问题吗? 谢谢!

3 个答案:

答案 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并导致在它到达集合结束时突破循环。