我们可以在迭代器 for 循环中添加额外的停止条件吗?
Can we add additional stopping condition in iterator for-loop?
在常规循环中,我们可以像下面这样,制作单个嵌套层。
for (int i=0; listObject != null && i < listObject.size(); i++) {
// Do whatever we want
}
但是,对于每个循环使用以下样式,我需要一个双重嵌套代码:-
if (listObject != null) {
for (Object object: listObject) {
// Do whatever we want
}
}
是否可以将listObject != null
条件嵌入到for循环语句中使其成为单嵌套代码?
您的第二个示例是清晰易懂的代码。在 if 块中嵌套 for 循环没有错。它比你的第一个例子更清楚。
但是如果你坚持要组合它们,你可以使用三元运算符在 listObject
为 null 时提供一个空列表。使用 Collections.emptyList
意味着不会发生迭代,也不会抛出 NullPointerException
。
for (Object object : listObject == null ? Collections.emptyList() : listObject)
我不认为我会使用这样的代码,因为已经存在一个清晰的示例,例如您的第二个示例,但这段代码确实提供了一种在 for
循环中获取两个冒号的方法。
为了简洁起见,在有一个嵌套循环的同时,我决定把它变成如下函数
void checkCondition(List<Object> listObject) {
if (listObject == null) return;
for (Object object: listObject) {
// Do whatever
}
}
在常规循环中,我们可以像下面这样,制作单个嵌套层。
for (int i=0; listObject != null && i < listObject.size(); i++) {
// Do whatever we want
}
但是,对于每个循环使用以下样式,我需要一个双重嵌套代码:-
if (listObject != null) {
for (Object object: listObject) {
// Do whatever we want
}
}
是否可以将listObject != null
条件嵌入到for循环语句中使其成为单嵌套代码?
您的第二个示例是清晰易懂的代码。在 if 块中嵌套 for 循环没有错。它比你的第一个例子更清楚。
但是如果你坚持要组合它们,你可以使用三元运算符在 listObject
为 null 时提供一个空列表。使用 Collections.emptyList
意味着不会发生迭代,也不会抛出 NullPointerException
。
for (Object object : listObject == null ? Collections.emptyList() : listObject)
我不认为我会使用这样的代码,因为已经存在一个清晰的示例,例如您的第二个示例,但这段代码确实提供了一种在 for
循环中获取两个冒号的方法。
为了简洁起见,在有一个嵌套循环的同时,我决定把它变成如下函数
void checkCondition(List<Object> listObject) {
if (listObject == null) return;
for (Object object: listObject) {
// Do whatever
}
}