ArrayList.get(-1) // why it will not return the last element?
答案 0 :(得分:2)
如果你想要这种行为:
List<T> snake = new ArrayList<>(){
@Override
public T get(int i) {
return super.get((i + size()) % size());
}
};
这适用于任何i值。
答案 1 :(得分:1)
首先, Java 不是 Python (尽管Jython在 Java 中实现 Python )。其次,您应该阅读ArrayList上的JavaDoc - 它会抛出Exception
,
IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size())
最后,你可以这样做
myList.get(myList.size() - 1);
获取List
中的最后一个元素(例如myList
)。
答案 2 :(得分:0)
没有回答为什么不可能,因为这不在StackOverflow的范围内。
但是,使用Java 8时可以通过以下方式实现:
Optional<E> optE = eCollection.stream().reduce((previous, current) -> current);
如果它存在,一旦您使用optE.get()
测试了状态,就可以通过optE.isPresent()
获取它。
但是,我很确定这会导致性能下降,因为您正在减少流,而您实际上只是想检查最后一个值。
我有一些希望它会在Java 9中添加,如果有足够的人抱怨使用Java 8.因为在我的例子中你不能像获取第一个元素那样容易,这将是:
Optional<E> optE = eCollection.stream().findFirst()
。
修改,还请注意其他操作是否会进行findFirst()
调用。例如filter()
来电。