在Scala中如何确保理解遍历所有非空列表?

时间:2012-10-31 01:08:49

标签: scala scala-collections

我有以下两个列表,我不确定在运行时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()

2 个答案:

答案 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)