尝试捕获val的o / p {寻找捕获呼叫id的值}到变量中以进行进一步处理但是 每当我尝试使用val b的o / p时,返回一个空列表。 在控制台上完美打印
`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..
答案 0 :(得分:0)
foreach
方法返回Unit
(即void
),因此b
的值为Unit
。
如果您想保留结果,则需要将foreach
替换为map
并删除内部foreach
。
您还可以使用filter
将map
合并到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:"))
}