【问题标题】:Count filtered records in scala计算scala中的过滤记录
【发布时间】:2015-07-01 22:42:10
【问题描述】:

由于我是 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

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

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

这给了我

xxx.lss.yyy23.com
xxx.lss.yyy33.com
xxx.lss.yyy33.com
xxx.lss.yyy53.com  

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

 data.count { x => x.contains("33")}  

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

【问题讨论】:

  • 我想你想要length而不是count,而且它必须在列表上而不是在println上调用。
  • @pedrofurla No..length 将给出字符串的字符数..
  • 检查 getLines() 返回的内容。
  • 您也可以将filter 替换为count 以获得相同的结果。不管怎样,我向你保证println(...).count 毫无意义。
  • Yaa...我已经更新了问题..

标签: scala scala-collections


【解决方案1】:

以下将为您提供包含“33”的行数:

data.split("\n").count(a => a.contains("33"))

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

以下方法可用于获取不包含“33”的行:

data.split("\n").count(a => !a.contains("33"))

在这种情况下,您只需要否定包含操作。

【讨论】:

    猜你喜欢
    • 2023-02-26
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多