开发者

simplified boundary checking for Java List

Is there an easy way/library to check and adjust parameters to stay inside the lists boundaries?

Here a long sample:

if (fromIndex < 0) {
  fromIndex = 0;
}
if (fromIndex > list.size() - 1) {
  fromIndex = list.size() - 1;
}

if (toIndex < 0) {
  toIndex = 0;
}
if (toIndex > list.size() - 1) {
  toIndex = list.size() - 1;
}

list.subList(fromIndex, toInd开发者_JAVA技巧ex);

I know i could move list.size() - 1 to a variable and do an extract-method on the index checks to remove redundant code. But it still seems a bit verbose for this simple task.


public int sanitize(int index) {
  return Math.max(0, Math.min(index, this.length-1));
}


If you want to check all accesses to your list, it seems to me you want to wrap your list within a class implementing the List interface and intercept the accessor methods to check/modify the accessor indices.

e.g.

List sanitised = new SanitisedList(existingList);

This is an example of the Decorator pattern. Note how you just need one class defined (SanitisedList) and you can apply that to any list you have. Use Zed's answer for a nice tidy bounds check.


You could use the ternary operator:

int listMax = list.size() - 1;
list.subList( fromIndex < 0 ? 0 : (fromIndex > listMax) ? listMax : fromIndex, 
              toIndex < 0 ? 0 : (toIndex > listMax) ? listMax : toIndex );
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜