82

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 までの List 要素を返すにはどうすればよいですか? 30 から 40 までのインデックスを取得したいが、インデックスが 35 個しかない場合は 5 個しか取得できません。

4

6 に答える 6

99

リストで最大インデックス 38を使用subList(30, 38);できないため、使用できません。

サブリストを要求する前に、リスト size() メソッドを使用して最大インデックスを明示的に決定することが唯一の方法です。

たとえば、サイズをチェックすると 35 が返されるので、次のように呼び出します。sublist(30, size());

また

pb2qコメントからコピー

dataList = dataList.subList(30, 38 > dataList.size() ? dataList.size() : 38);
于 2012-08-23T20:49:03.713 に答える
43

最後の要素を取得するには、リストのサイズを2番目のパラメーターとして使用します。たとえば、35個のファイルがあり、最後の5個が必要な場合は、次のようにします。

dataList.subList(30, 35);

これを行うための保証された安全な方法は次のとおりです。

dataList.subList(Math.max(0, first), Math.min(dataList.size(), last) );
于 2012-08-23T20:52:33.353 に答える