如何使用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);
我得到错误的索引错误,因为我想索引列表之外。 我怎么可以例如返回列表元素从30到35? 我想如果我想索引从30到40,但如果只有35个索引只得到5。
使用子subList(30, 38);
将失败,因为最大索引38不在列表中,所以它不可能。
只有在询问子列表之前,您可以使用list size()方法明确确定最大索引。
例如,检查大小,返回35,所以调用sublist(30, size());
要么
从pb2q评论复制
dataList = dataList.subList(30, 38 > dataList.size() ? dataList.size() : 38);
要获得最后一个元素,只需使用列表的大小作为第二个参数。 例如,如果你有35个文件,而你想要最后五个文件,你可以这样做:
dataList.subList(30, 35);
保证安全的方法是:
dataList.subList(Math.max(0, first), Math.min(dataList.size(), last) );
我已经实施并testing了这一个; 它应该涵盖大部分基地:
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); }