【问题标题】:Get last X items of a list in java在java中获取列表的最后X项
【发布时间】:2016-09-10 04:57:50
【问题描述】:

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

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

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

【问题讨论】:

标签: java list arraylist


【解决方案1】:

一定要使用方法子列表

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

【讨论】:

  • 严格来说,这会获取列表的最后 39 个元素,因为 subList 的第二个参数是独占的。
  • 如果列表的长度小于我们想要的大小会发生什么,即。该列表仅包含 5 个元素。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-23
      • 2010-10-13
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      相关资源
      最近更新 更多