如何获取数组列表的最后一个值?
当前回答
使用流API的替代方案:
list.stream().reduce((first, second) -> second)
结果为最后一个元素的Optional。
其他回答
在普通Java中没有优雅的方法。
谷歌番石榴
谷歌番石榴库是伟大的-检查他们的Iterables类。如果列表为空,这个方法将抛出NoSuchElementException,而不是IndexOutOfBoundsException,就像典型的size()-1方法一样-我发现NoSuchElementException更好,或者能够指定默认值:
lastElement = Iterables.getLast(iterableList);
如果列表为空,你也可以提供一个默认值,而不是一个异常:
lastElement = Iterables.getLast(iterableList, null);
或者,如果你使用选项:
lastElementRaw = Iterables.getLast(iterableList, null);
lastElement = (lastElementRaw == null) ? Option.none() : Option.some(lastElementRaw);
这个怎么样? 在你班上的某个地方……
List<E> list = new ArrayList<E>();
private int i = -1;
public void addObjToList(E elt){
i++;
list.add(elt);
}
public E getObjFromList(){
if(i == -1){
//If list is empty handle the way you would like to... I am returning a null object
return null; // or throw an exception
}
E object = list.get(i);
list.remove(i); //Optional - makes list work like a stack
i--; //Optional - makes list work like a stack
return object;
}
这对我很管用。
private ArrayList<String> meals;
public String take(){
return meals.remove(meals.size()-1);
}
使用lambdas:
Function<ArrayList<T>, T> getLast = a -> a.get(a.size() - 1);
如果修改列表,则使用listIterator()并从最后一个索引(即分别为size()-1)开始迭代。 如果你再次失败,检查你的列表结构。
推荐文章
- 用于桌面应用程序的Swing vs JavaFx
- 为什么这个Java程序会终止,尽管它显然不应该(也没有)终止?
- 使用split("|")按管道符号拆分Java字符串
- 当内存不足导致抛出OutOfMemoryError时会发生什么?
- 检查ArrayList中是否存在值
- 我们能在Java中创建无符号字节吗
- 同步vs锁定
- 在ExecutorService的提交和执行之间进行选择
- 如何在javadoc中转义@字符?
- 如何在Java中创建唯一的ID ?
- 为什么Java类的编译与空行不同?
- Android Studio无法找到有效的Jvm(与MAC OS相关)
- 为什么一个组合器需要减少方法转换类型在java 8
- CountDownLatch是如何在Java多线程中使用的?
- 如果我同步了同一个类上的两个方法,它们能同时运行吗?