我有以下两个列表,我不确定在运行时list2是空还是满,但list1将始终为非空,如何确保以下for循环值至少打印< / p>
val list1 = List(1,2,3) //> list1 : List[Int] = List(1, 2, 3)
val list2 = List() //> list2 : List[Nothing] = List()
for( counti <- list1 ; countj <- list2 ) yield println (counti + " - " + countj)
//> res7: List[Unit] = List()
我期待像
这样的东西1 - BLANK
2 - BLANK
3 - BLANK
但上面的for循环给我空白结果List()
答案 0 :(得分:6)
for (
counti <- list1;
countj <- if(list2.nonEmpty) list2 else List("BLANK")
) {
println(counti + " - " + countj)
}
答案 1 :(得分:2)
首先,如果您仅使用yield
副作用(打印),则不需要for
:
for( counti <- list1 ; countj <- list2 )
println (counti + " - " + countj)
其次,如果你有一个空列表,你对countj
的价值是什么?如果countj
没有值,那么你无法期望代码能够正常工作。
这可能会做你想要的事情:
// Just print counti
if (list2.isEmpty)
for( counti <- list1 ) println(counti)
// Print both
else for ( counti <- list1 ; countj <- list2 )
println (counti + " - " + countj)