我只能找到关于列表中最后/第一个元素或获取特定项等的答案。
假设我有一个包含100个元素的列表,我想返回最后40个元素。我该如何做?我尝试过这样做,但它只给了我一个元素..
Post last40posts = posts.get(posts.size() -40);
List<Post> myLastPosts = posts.subList(posts.size()-40, posts.size());
subList
方法的第二个参数是不包括在内的。 - Andy Turner(补充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
}
你的代码只会给你一个单一元素。你需要使用subList方法,例如:
posts.subList(posts.size()-40, posts.size())
到
size()`来获取最后40个元素。另外,还可以参考https://dev59.com/hXM_5IYBdhLWcg3wq1GF(或者https://dev59.com/BGct5IYBdhLWcg3wa87p)。 - TunakisubList
怎么样? - x80486