Java中是否有无需重复变量名即可获取ArrayList/数组最后一个元素的简写方式?
Java获取集合/数组最后一个元素的简写方案
原生Java在21版本之前没有内置的list.get(-1)语法支持,负数索引会直接抛出IndexOutOfBoundsException,但有多种方案可以实现无需重复变量名的简写需求:
- 方案1:Java 21+ 原生内置方法
Java 21引入了SequencedCollection接口,所有常见的List实现(比如ArrayList)都实现了该接口,直接调用内置的getLast()方法即可:
// 单一层级获取最后一个元素 var lastElement = list.getLast(); // 示例嵌套场景写法 var LastPageOfLastBook = MyLibraryVar.Books.getLast().Pages.getLast();
同时该接口还提供了removeLast()方法,删除最后一个元素的同时直接返回被删除的元素,完全匹配删除赋值的需求。
- 方案2:借助第三方工具类
如果使用的Java版本低于21,可以用主流工具库封装好的现成方法:- Guava库:使用
Iterables.getLast()
import com.google.common.collect.Iterables; // 空列表会抛出NoSuchElementException var lastElement = Iterables.getLast(list); // 支持自定义空列表默认值 var lastElementOrDefault = Iterables.getLast(list, null);- Apache Commons Collections库:使用
ListUtils.last()
import org.apache.commons.collections4.ListUtils; var lastElement = ListUtils.last(list); - Guava库:使用
- 方案3:自定义工具方法
如果不想引入第三方依赖,可以自己封装通用静态工具方法,一次封装全项目复用:
// 针对List的封装 public static <T> T last(List<T> list) { if (list == null || list.isEmpty()) { throw new IllegalArgumentException("List不能为空或null"); } return list.get(list.size() - 1); } // 针对数组的封装 public static <T> T last(T[] array) { if (array == null || array.length == 0) { throw new IllegalArgumentException("数组不能为空或null"); } return array[array.length - 1]; }
使用时的嵌套场景写法:
var LastPageOfLastBook = last(last(MyLibraryVar.Books).Pages);
补充说明:Java原生数组同样不支持负索引,除了上述自定义工具方法,也可以先通过Arrays.asList()转为List后使用上述集合类的简写方案。
内容的提问来源于stack exchange,提问作者jsonphy
相关产品推荐
相关产品推荐

