我有一个显示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);我得到错误的索引,因为我想获取列表之外的索引。例如,我如何返回从30到35的列表元素?我想如果我想得到从30到40的索引,但如果只有35个索引,那么只有5个。
发布于 2012-08-24 04:49:04
使用subList(30, 38);将失败,因为最大索引38在列表中不可用,因此不可能。
唯一的办法可能是在请求子列表之前,使用list size()方法显式地确定最大索引。
例如,检查size,它返回35,因此调用sublist(30, size());
或
从pb2q comment复制的
dataList = dataList.subList(30, 38 > dataList.size() ? dataList.size() : 38);发布于 2015-06-23 20:57:32
我已经实现并测试了这个;它应该涵盖大多数基础:
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);
}发布于 2012-08-24 04:52:33
要获得最后一个元素,只需使用列表的大小作为第二个参数。例如,如果你有35个文件,你想要最后5个文件,你应该这样做:
dataList.subList(30, 35);要做到这一点,一个有保证的安全方法是:
dataList.subList(Math.max(0, first), Math.min(dataList.size(), last) );https://stackoverflow.com/questions/12099721
复制相似问题