如何使用 subList()

2022-08-31 12:05:57

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

private List<directoryListObj> dataList = new ArrayList<>();

dataList = dataList.subList(firstRow, lastRow);

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

dataList = dataList.subList(5, 15);

它工作正常。但是当我这样做时:

dataList = dataList.subList(30, 38);

我收到错误索引,因为我想在列表之外获取索引。例如,如何返回从 30 到 35 的 List 元素?我想要是否要从30到40获取索引,但如果只有35个索引,则仅获得5个索引。


答案 1

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

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

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

复制自 pb2q 注释

dataList = dataList.subList(30, 38 > dataList.size() ? dataList.size() : 38);

答案 2

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

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);
}

推荐