scala 中过滤记录的计数

Ama*_*man 4 scala scala-collections

由于我是 scala 新手,这个问题对所有人来说可能看起来非常基本。
我有一个名为 data.txt 的文件,其中包含如下内容:

xxx.lss.yyy23.com-->mailuogwprd23.lss.com,Hub,12689,14.98904563,1549
xxx.lss.yyy33.com-->mailusrhubprd33.lss.com,Outbound,72996,1.673717588,1949
xxx.lss.yyy33.com-->mailuogwprd33.lss.com,Hub,12133,14.9381027,664
xxx.lss.yyy53.com-->mailusrhubprd53.lss.com,Outbound,72996,1.673717588,3071
Run Code Online (Sandbox Code Playgroud)

我想拆分行并根据 xxx.lss.yyy23.com 中的数字查找记录

 val data = io.Source.fromFile("data.txt").getLines().map { x => (x.split("-->"))}.map { r => r(0) }.mkString("\n")  
Run Code Online (Sandbox Code Playgroud)

这给了我

xxx.lss.yyy23.com
xxx.lss.yyy33.com
xxx.lss.yyy33.com
xxx.lss.yyy53.com  
Run Code Online (Sandbox Code Playgroud)

这就是我想要计算的确切值......

 data.count { x => x.contains("33")}  
Run Code Online (Sandbox Code Playgroud)

如何获取不包含 33 的记录数...

Dem*_*ots 5

下面将给出包含“33”的行数:

data.split("\n").count(a => a.contains("33"))
Run Code Online (Sandbox Code Playgroud)

上面的内容不起作用的原因是您需要data再次拆分为字符串数组。您之前的语句实际上使用换行符作为分隔符将结果连接成单个字符串mkstring,因此您无法真正运行像 count 这样的集合操作。

以下内容将用于获取不包含“33”的行:

data.split("\n").count(a => !a.contains("33"))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您只需否定 contains 操作即可。