Java列表的简化边界检查

Java列表的简化边界检查,java,optimization,list,Java,Optimization,List,是否有一种简单的方法/库来检查和调整参数以保持在列表边界内 这里有一个很长的示例: 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.s

是否有一种简单的方法/库来检查和调整参数以保持在列表边界内

这里有一个很长的示例:

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, toIndex);
if(从索引<0){
fromIndex=0;
}
if(fromIndex>list.size()-1){
fromIndex=list.size()-1;
}
如果(toIndex<0){
toIndex=0;
}
如果(toIndex>list.size()-1){
toIndex=list.size()-1;
}
列表.子列表(从索引到索引);
我知道我可以将
list.size()-1
移动到一个变量,并对索引检查执行提取方法以删除冗余代码。但是对于这个简单的任务来说,它似乎仍然有点冗长。

如果您想检查对列表的所有访问,在我看来,您似乎想将列表包装在实现接口的类中,并截取访问器方法以检查/修改访问器索引

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


这是该模式的一个示例。请注意,您只需要定义一个类(
SanitisedList
),就可以将其应用于任何列表。用于整洁的边界检查。

您可以使用三元运算符:

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

小提示:
列表
列表大小
也应该是parameter@tatilans:true,在这个看起来有点像静态方法的代码段的上下文中。然而,Brian建议包装现有列表是实现这一点的更好方法(更灵活、更少干扰、更少样板代码),在这种情况下,
list
可能是最终的成员字段。OK。我把它改成这个长度。如果它只是增加了更多的混乱,我将回滚:)
int listMax = list.size() - 1;
list.subList( fromIndex < 0 ? 0 : (fromIndex > listMax) ? listMax : fromIndex, 
              toIndex < 0 ? 0 : (toIndex > listMax) ? listMax : toIndex );