Scala o / p捕获

时间:2018-06-08 08:49:47

标签: scala

  
    

尝试捕获val的o / p {寻找捕获呼叫id的值}到变量中以进行进一步处理但是       每当我尝试使用val b的o / p时,返回一个空列表。         在控制台上完美打印

  

CODE

`val l = Source.fromFile(filename).getLines().toList
val b =  l.view.zipWithIndex.filter(_._1.contains("INVITE sip:")).foreach { 
  case (s, i) => l.view(i-1, 
i+3).filterNot(_.contains("Via:")).foreach(println(_))
  }
    println(b) //Not printing anything`    

功能输出(控制台)

Mar 28 07:29:44.384583从套接字7收到UDP消息(UDP_CH   10.16.XXX.XXX:XXXX):   INVITE sip:410133@10.16.XXX.XXX:XXXX; user = phone; transport = UDP SIP / 2.0

来电显示:3oNDcusoym86NijUpnyHPA..   Mar 28 07:30:59.709565从套接字7收到UDP消息(UDP_CH   10.16.XXX.XXX:XXXX):   邀请sip:410106@10.16.XXX.XXX:XXXX; user = phone; transport = UDP SIP / 2.0

呼号ID:LFJ11WJOpKp2NUZxOe1z0g..

1 个答案:

答案 0 :(得分:0)

foreach方法返回Unit(即void),因此b的值为Unit

如果您想保留结果,则需要将foreach替换为map并删除内部foreach

您还可以使用filtermap合并到collect中:

val b = l.view.zipWithIndex.collect {
  case (s, i) if s.contains("INVITE sip:") =>
    l.view(i-1, i+3).filterNot(_.contains("Via:"))
}

如果您想要结果而非结果view,请执行此操作

val b = l.zipWithIndex.collect {
  case (s, i) if s.contains("INVITE sip:") =>
    l.slice(i-1, i+3).filterNot(_.contains("Via:"))
}