首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用subList()

如何使用subList()
EN

Stack Overflow用户
提问于 2012-08-24 04:46:47
回答 6查看 148.7K关注 0票数 82

我有一个显示Glassfish日志文件列表的JSF页面。我使用延迟加载进行分页。我将日志文件名列表保存到Java List中。

代码语言:javascript
复制
private List<directoryListObj> dataList = new ArrayList<>();

dataList = dataList.subList(firstRow, lastRow);

这是问题所在。例如,我在目录中有35个文件。当我这样做的时候

代码语言:javascript
复制
dataList = dataList.subList(5, 15);

它工作得很好。但是当我这样做的时候:

代码语言:javascript
复制
dataList = dataList.subList(30, 38);

我得到错误的索引,因为我想获取列表之外的索引。例如,我如何返回从30到35的列表元素?我想如果我想得到从30到40的索引,但如果只有35个索引,那么只有5个。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-08-24 04:49:04

使用subList(30, 38);将失败,因为最大索引38在列表中不可用,因此不可能。

唯一的办法可能是在请求子列表之前,使用list size()方法显式地确定最大索引。

例如,检查size,它返回35,因此调用sublist(30, size());

从pb2q comment复制的

代码语言:javascript
复制
dataList = dataList.subList(30, 38 > dataList.size() ? dataList.size() : 38);
票数 99
EN

Stack Overflow用户

发布于 2015-06-23 20:57:32

我已经实现并测试了这个;它应该涵盖大多数基础:

代码语言:javascript
复制
public static <T> List<T> safeSubList(List<T> list, int fromIndex, int toIndex) {
    int size = list.size();
    if (fromIndex >= size || toIndex <= 0 || fromIndex >= toIndex) {
        return Collections.emptyList();
    }

    fromIndex = Math.max(0, fromIndex);
    toIndex = Math.min(size, toIndex);

    return list.subList(fromIndex, toIndex);
}
票数 51
EN

Stack Overflow用户

发布于 2012-08-24 04:52:33

要获得最后一个元素,只需使用列表的大小作为第二个参数。例如,如果你有35个文件,你想要最后5个文件,你应该这样做:

代码语言:javascript
复制
dataList.subList(30, 35);

要做到这一点,一个有保证的安全方法是:

代码语言:javascript
复制
dataList.subList(Math.max(0, first), Math.min(dataList.size(), last) );
票数 43
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12099721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档