How to get the last value of an ArrayList
如何获取ArrayList的最后一个值?
我不知道ArrayList的最后一个索引。
以下是
1 | E e = list.get(list.size() - 1); |
在香草Java中没有一种优雅的方式。
谷歌番石榴
Google Guava图书馆很棒 - 查看他们的
1 | lastElement = Iterables.getLast(iterableList); |
如果列表为空,您还可以提供默认值,而不是例外:
1 | lastElement = Iterables.getLast(iterableList, null); |
或者,如果您使用选项:
1 2 |
这应该这样做:
1 2 3 | if (arrayList != null && !arrayList.isEmpty()) { T item = arrayList.get(arrayList.size()-1); } |
我使用micro-util类来获取列表的最后一个(和第一个)元素:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public final class Lists { private Lists() { } public static < T > T getFirst(List< T > list) { return list != null && !list.isEmpty() ? list.get(0) : null; } public static < T > T getLast(List< T > list) { return list != null && !list.isEmpty() ? list.get(list.size() - 1) : null; } } |
稍微灵活一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import java.util.List; /** * Convenience class that provides a clearer API for obtaining list elements. */ public final class Lists { private Lists() { } /** * Returns the first item in the given list, or null if not found. * * @param < T > The generic list type. * @param list The list that may have a first item. * * @return null if the list is null or there is no first item. */ public static < T > T getFirst( final List< T > list ) { return getFirst( list, null ); } /** * Returns the last item in the given list, or null if not found. * * @param < T > The generic list type. * @param list The list that may have a last item. * * @return null if the list is null or there is no last item. */ public static < T > T getLast( final List< T > list ) { return getLast( list, null ); } /** * Returns the first item in the given list, or t if not found. * * @param < T > The generic list type. * @param list The list that may have a first item. * @param t The default return value. * * @return null if the list is null or there is no first item. */ public static < T > T getFirst( final List< T > list, final T t ) { return isEmpty( list ) ? t : list.get( 0 ); } /** * Returns the last item in the given list, or t if not found. * * @param < T > The generic list type. * @param list The list that may have a last item. * @param t The default return value. * * @return null if the list is null or there is no last item. */ public static < T > T getLast( final List< T > list, final T t ) { return isEmpty( list ) ? t : list.get( list.size() - 1 ); } /** * Returns true if the given list is null or empty. * * @param < T > The generic list type. * @param list The list that has a last item. * * @return true The list is empty. */ public static < T > boolean isEmpty( final List< T > list ) { return list == null || list.isEmpty(); } } |
使用lambdas:
1 | Function<ArrayList< T >, T> getLast = a -> a.get(a.size() - 1); |
如果可以,将
如解决方案中所述,如果
1 2 3 4 5 | public class ListUtils { public static < T > Optional< T > last(List< T > list) { return list.isEmpty() ? Optional.empty() : Optional.of(list.get(list.size() - 1)); } } |
正如您所期望的那样,列表的最后一个元素将作为
1 2 |
它还优雅地处理空列表:
1 2 |
如果你使用LinkedList,你可以只用
履行
声明LinkedList
1 | LinkedList<Object> mLinkedList = new LinkedList<>(); |
然后这是你可以用来获得你想要的方法,在这种情况下我们讨论列表的FIRST和LAST元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | /** * Returns the first element in this list. * * @return the first element in this list * @throws NoSuchElementException if this list is empty */ public E getFirst() { final Node<E> f = first; if (f == null) throw new NoSuchElementException(); return f.item; } /** * Returns the last element in this list. * * @return the last element in this list * @throws NoSuchElementException if this list is empty */ public E getLast() { final Node<E> l = last; if (l == null) throw new NoSuchElementException(); return l.item; } /** * Removes and returns the first element from this list. * * @return the first element from this list * @throws NoSuchElementException if this list is empty */ public E removeFirst() { final Node<E> f = first; if (f == null) throw new NoSuchElementException(); return unlinkFirst(f); } /** * Removes and returns the last element from this list. * * @return the last element from this list * @throws NoSuchElementException if this list is empty */ public E removeLast() { final Node<E> l = last; if (l == null) throw new NoSuchElementException(); return unlinkLast(l); } /** * Inserts the specified element at the beginning of this list. * * @param e the element to add */ public void addFirst(E e) { linkFirst(e); } /** * Appends the specified element to the end of this list. * * <p> This method is equivalent to {@link #add}. * * @param e the element to add */ public void addLast(E e) { linkLast(e); } |
那么,你可以使用
1 | mLinkedList.getLast(); |
获取列表的最后一个元素。
在Java中获取列表的最后一个元素没有优雅的方法(与Python中的
你必须使用
使用通过复杂方法调用获得的列表时,解决方法位于临时变量中:
1 2 | List<E> list = someObject.someMethod(someArgument, anotherObject.anotherMethod()); return list.get(list.size()-1); |
这是避免丑陋且通常很昂贵甚至无法工作的唯一选择:
1 2 3 | return someObject.someMethod(someArgument, anotherObject.anotherMethod()).get( someObject.someMethod(someArgument, anotherObject.anotherMethod()).size() - 1 ); |
如果将此设计缺陷的修复程序引入Java API,那将是很好的。
列表中的最后一项是
因此列表中的元素1位于数组中的索引0处
列表中的元素2位于数组中的索引1处
列表中的元素3位于数组中的索引2处
等等..
您需要做的就是使用size()来获取Arraylist的最后一个值。
对于前者如果你是整数的ArrayList,那么你将得到最后一个值
1 | int lastValue = arrList.get(arrList.size()-1); |
请记住,可以使用索引值访问Arraylist中的元素。因此,ArrayLists通常用于搜索项目。
如果修改列表,则使用
如果再次失败,请检查列表结构。
数组将它们的大小存储在名为"length"的局部变量中。给定一个名为"a"的数组,您可以使用以下内容来引用最后一个索引而不知道索引值
一个[则为a.length-1]
为您将使用的最后一个索引分配值5:
一个[则为a.length-1] = 5;
使用Stream API的替代方案:
1 | list.stream().reduce((first, second) -> second) |
结果是最后一个元素的可选项。
这个怎么样..
你班上的某个地方......
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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; } |