在迭代两个列表并在布局中显示项目的同时,我在下面的行中得到了数组索引超出范围的异常。我们如何进行空检查或我不会得到错误的条件
ParallelList<BaseItem> list = new ParallelList<BaseItem>(highlighted, normal);
for (List<BaseItem> ints : list) {
final BaseItem itemH = ints.get(0);
if(!ints.get(1).equals(null) && ints.size()!=0){ // error here at this line
final BaseItem itemn = ints.get(1);
}
使用以下的平行列表
public class ParallelList<T> implements Iterable<List<T>> {
private final List<List<T>> lists;
public ParallelList(List<T>... lists) {
this.lists = new ArrayList<List<T>>(lists.length);
this.lists.addAll(Arrays.asList(lists));
}
public Iterator<List<T>> iterator() {
return new Iterator<List<T>>() {
private int loc = 0;
public boolean hasNext() {
boolean hasNext = false;
for (List<T> list : lists) {
hasNext |= (loc < list.size());
}
return hasNext;
}
public List<T> next() {
List<T> vals = new ArrayList<T>(lists.size());
for (int i=0; i<lists.size(); i++) {
if(loc < lists.get(i).size()){
vals.add(lists.get(i).get(loc));
}
// vals.add(loc < lists.get(i).size() ? lists.get(i).get(loc): null);
}
loc++;
return vals;
}
public void remove() {
for (List<T> list : lists) {
if (loc < list.size()) {
list.remove(loc);
}
}
}
};
}
}
错误就在这里
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
at java.util.ArrayList.get(ArrayList.java:308)
答案 0 :(得分:0)
你应该扭转这些条件。首先确保列表的大小足够大(即它有多个元素),然后才尝试访问列表的第二个元素:
if(ints.size() > 1 && ints.get(1) != null)
答案 1 :(得分:0)
转过身来:
if(ints.size()!=0 && !ints.get(1).equals(null))
&amp;&amp;连接是从左到右的评估。因此,当大小为0时,左侧部分已经为假。完整&amp;&amp;表达式不能成为真正的无所谓!ints.get(1).equals(null)被评估为。因此它根本不会被执行。
顺便说一句,第一个元素的索引是0.你真的想用: if(ints.size()!=0 && !ints.get(0).equals(null))
或
if(ints.size()<=2 && !ints.get(1).equals(null))
PS:仔细查看错误消息,结果证明后者真正解决了您的问题。大小实际上是1,但您正在访问索引为1的第二个项目。(同样,第一个索引为0)
答案 2 :(得分:0)
你应该尝试这些条件
if(!ints.isEmpty()){
final BaseItem itemH = ints.get(0);
if( ints.size()>=1 && !ints.get(1).equals(null) ){
final BaseItem itemn = ints.get(1);
}
}
}