在java中获取列表的最后X项

时间:2016-05-13 21:14:08

标签: java list arraylist

我似乎只能在列表中找到关于最后/第一个元素的答案,或者您可以获得特定项目等。

假设我有100个元素的列表,我想返回最后40个元素。我怎么做?我试过这样做,但它给了我一个元素..

   NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setSmallIcon(R.drawable.small_notification);
    mBuilder.setLargeIcon(BitmapFactory.decodeResource(getBitmapFromURL("YOURURL"));

    if (version >= 23) {
        mBuilder.setColor(ContextCompat.getColor(this, R.color.black));
    } else {
        mBuilder.setColor(this.getResources().getColor(R.color.black));
    }

3 个答案:

答案 0 :(得分:2)

请使用方法子列表

List<Post> myLastPosts = posts.subList(posts.size()-40, posts.size());

答案 1 :(得分:2)

您的代码只会提供一个元素。 您需要使用subList方法,如:

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

答案 2 :(得分:1)

(要完成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
}