如何使用 subList()

新手上路,请多包涵

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

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

dataList = dataList.subList(firstRow, lastRow);

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

dataList = dataList.subList(5, 15);

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

 dataList = dataList.subList(30, 38);

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

原文由 user1285928 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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

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

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

或者

从 pb2q 评论复制

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

原文由 kosa 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 Haroldo_OK 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏