是否有一种简单的方法/库来检查和调整参数以保持在列表边界内?
这是一个很长的样本:
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
移动到变量并对索引检查执行提取方法以删除冗余代码。但对于这个简单的任务,它似乎仍然有点冗长。
答案 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 );