如何检查2D ArrayList中的元素是否为空,而没有空指针异常? 为了清楚起见,我将定义以下内容:
List<String> innerList = new ArrayList()<>;
List<List<String> outerList = new ArrayList()<>;
我想在外部列表上使用.get()拉内部列表。 问题是,一旦在null元素上使用.get()方法,它就会给出null指针异常。 我的目标是检查externalList中的元素是否为null(如果有),然后执行某些操作。如果不为null,请执行其他操作。我无法检查元素是否为null,因为我必须使用.get(),因为它是2D,这是我当前的问题。 示例代码:
List<List<String>> outerList = new ArrayList()<>;
if(outerList.get(indexOfANullElement).isEmpty()){
//do something...
}
在对null元素使用.get()方法后,它将自动为我提供一个null指针。我不能包装它,因为我必须先用.get()引用辅助列表,该列表会自动返回null。
答案 0 :(得分:1)
怎么了
List<String> innerList = outerList.get(index);
if (innerList == null)
含义:在检索到的列表上调用方法之前,可以轻松地检查它是否为null。
有关更多具体建议,我们将需要查看您的更多代码。
答案 1 :(得分:1)
由于primaryList.get(indexOfSecondayList)
的 size 为 0 ,因此您从primaryList
中得到了错误。因此,避免此错误的正确方法是
List<List<String>> outerList = new ArrayList()<>;
if (outerList.size() > 0) {
List<String> innerList = outerList.get(index);
}
答案 2 :(得分:0)
对您的代码进行较小的修改,就像一个超级魅力
if(primaryList.get(indexOfSecondaryList) != null
&& primaryList.get(indexOfSecondaryList).isEmpty()){
//do something
}
答案 3 :(得分:0)
for循环不是必需的,但可以确保仅访问externalList的成员(如果存在)。
for (int i = 0; i < outerList.size(); i++) {
List innerList = outerList.get(i);
if (innerList != null)
// rest of code
}
答案 4 :(得分:0)
根据您的评论,我认为您将IndexOutOfBoundsException
与NullPointerException
混淆了。
List<String> samples = new ArrayList<>();
try {
System.out.println(samples.get(0)); // throw IndexOutOfBoundsException
} catch (IndexOutOfBoundsException e){
e.printStackTrace();
}
Thread.sleep(200); // just wait for the err to print to the console first before the out
samples.add(null);
System.out.println(samples.get(0)); // works fine
因此,请考虑一下您的代码中,您可能想首先使用size
检查列表的index
。
答案 5 :(得分:0)
从Java 8开始,有另一种处理null
的方法:Optional
。我们可以使用Optional.filter
来检查不同的条件:
int index = 0;
Optional<List<String>> outerListElementAtIndex = Optional.of(outerList).filter(l -> l.size() > index).map(l -> l.get(index));
基本上,它会检查有关列表长度的索引是否有效。有了这样的Optinal
,您可以通过相同的方式继续访问内部列表的元素:
int innerElementIndex = 0;
Optional<String> optionalString = outerListElementAtIndex.filter(l -> l.size() > index).map(l -> l.get(innerElementIndex));
我们可以将代码包装到一个辅助方法中:
public static <T> Optional<T> getOptionalElementAtIndexes(List<List<T>> list, int outerIndex, int innerIndex) {
return Optional.of(list)
.filter(l -> l.size() > outerIndex).map(l -> l.get(outerIndex))
.filter(l -> l.size() > innerIndex).map(l -> l.get(innerIndex));
}
然后我们得到一行Optinal<String>
:
Optional<String> optionalString = getOptionalElementAtIndexes(outerList, outerIndex, innertIndex);
这样,只有当列表不是List
且具有足够的元素时,我们才能确保获取任何null
的元素。如您所问:这是“ 紧急解决方案”吗?