获取Java列表中的最后X个项目

6

我只能找到关于列表中最后/第一个元素或获取特定项等的答案。

假设我有一个包含100个元素的列表,我想返回最后40个元素。我该如何做?我尝试过这样做,但它只给了我一个元素..

Post last40posts = posts.get(posts.size() -40);

2
请参考https://dev59.com/M3E85IYBdhLWcg3wMQlm。您可以使用`subList`从`size() - 40size()`来获取最后40个元素。另外,还可以参考https://dev59.com/hXM_5IYBdhLWcg3wq1GF(或者https://dev59.com/BGct5IYBdhLWcg3wa87p)。 - Tunaki
subList 怎么样? - x80486
可能是重复的问题:Java:如何将ArrayList拆分为多个小ArrayList? - A Jar of Clay
3个回答

8
请使用 sub list 方法。
List<Post> myLastPosts = posts.subList(posts.size()-40, posts.size());

4
严格来说,这会获取列表的最后39个元素,因为subList方法的第二个参数是不包括在内的。 - Andy Turner
1
如果列表的长度比我们想要的大小要小,例如列表只包含5个元素,会发生什么? - Bruno Finger
@BrunoFinger 如果那样发生,你将会得到IndexOutOfBoundsException错误。但是我想知道如何修复它。 - Agustin Rodriguez
你为什么在标签中垃圾邮件arraylist,如果这只是针对简单列表而不是ArrayList的话,兄弟? - Raul Chiarella

6

(补充Ankit Malpani的回答)如果我们可爱的用户提供了40,那么你需要将其限制在列表大小范围内:

posts.subList(posts.size()-Math.min(posts.size(),40), posts.size())

另一种展示方式:

通过以下方法实现:

@Test
public void should_extract_last_n_entries() {
    List<String> myList = Arrays.asList("0","1","2","3","4");
    int myListSize = myList.size();
    log.info(myList.subList(myListSize,myListSize).toString());   // output : []
    log.info(myList.subList(myListSize-2,myListSize).toString()); // output : [3, 4]
    log.info(myList.subList(myListSize-5,myListSize).toString()); // output : [0, 1, 2, 3, 4]
    int lastNEntries = 50; // now use user provided int
    log.info(myList.subList(myListSize-Math.min(myListSize,lastNEntries),myListSize).toString());
                          // output : [0, 1, 2, 3, 4]
    // log.info(myList.subList(myListSize-lastNEntries,myListSize).toString());
                          // ouch IndexOutOfBoundsException: fromIndex = -45
}

1

你的代码只会给你一个单一元素。你需要使用subList方法,例如:

posts.subList(posts.size()-40, posts.size())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接