Java List的简化边界检查

时间:2009-10-06 12:20:18

标签: 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.size() - 1;
}

list.subList(fromIndex, toIndex);

我知道我可以将list.size() - 1移动到变量并对索引检查执行提取方法以删除冗余代码。但对于这个简单的任务,它似乎仍然有点冗长。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

如果你想检查列表的所有访问,在我看来你想要在实现List接口的类中包装你的列表并截取访问器方法来检查/修改访问者索引。

e.g。

List sanitised = new SanitisedList(existingList);

这是Decorator模式的一个例子。请注意您只需要定义一个类(SanitisedList),然后将其应用于任何列表。使用Zed's answer进行漂亮的整齐边界检查。

答案 2 :(得分:0)

您可以使用三元运算符:

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