为什么当我尝试删除列表中的空字符串时,这些操作都不起作用?
这是我的清单:
(yuhindmklwm00409219,958193628,0305delete,2700)
(yuhindmklwm00409219,958193628,0305delete,800)
(yuhindmklwm00409219,959262446,0219delete,62)
()
(yuhindmklwm00437293,752013801,0220delete,2700)
()
()
()
(yuhindmklwm00437293,85382,0126delete,500)
()
(yuhindmklwm00437293,863056514,0326delete,-2700)
(yuhindmklwm00437293,863056514,0326delete,2700)
()
()
()
()
()
(yuhindmklwm00437293,85258,0313delete,1000)
(yuhindmklwm00437293,85012,0311delete,1000)
(yuhindmklwm00437293,85718,0311delete,2700)
()
()
()
()
()
()
()
(yuhindmklwm00437293,744622574,0322delete,90)
(yuhindmklwm00437293,83704,0215delete,17)
()
()
(yuhindmklwm00437293,85253,0331delete,-2700)
(yuhindmklwm00437293,85253,0331delete,2700)
()
()
()
()
()
()
()
()
(yuhindmklwm00437293,752013801,0305delete,2700)
(yuhindmklwm00437293,33165,0315delete,1000)
(yuhindmklwm00437293,85018,0319delete,100)
(yuhindmklwm00437293,85018,0219delete,100)
(yuhindmklwm00437293,85018,0118delete,100)
(yuhindmklwm00437293,90265,0312delete,6)
(yuhindmklwm00437293,02465,0312delete,25)
(yuhindmklwm00437293,857164939,0313delete,15)
(yuhindmklwm00437293,22102,0313delete,4)
(yuhindmklwm00437293,55423,0313delete,100)
(yuhindmklwm00437293,02465,0314delete,1)
(yuhindmklwm00437293,90265,0312delete,1)
(yuhindmklwm00437293,93108,0315delete,25)
(yuhindmklwm00437293,220432304,0315delete,35)
(yuhindmklwm00437293,701211570,0315delete,35)
(yuhindmklwm00437293,28801,0315delete,10)
(yuhindmklwm00437293,93108,0211delete,3)
(yuhindmklwm00437293,93108,02)
这是列表的类型: List [String] = List((yuhindmklwm00437293,93108,02)..........))
我尝试过滤:
outputList1.filter(_.isNotNull).size
和
outputList1.map(record => if (record.size>3) record) else None)
这两种方法都无法删除空字符串。
列表的大小保持不变答案 0 :(得分:2)
你的第一种方法不起作用,因为正如jwvh所提到的,空字符串""
不是null
。您的代码只过滤掉空字符串。
您的第二种方法并未提供预期结果(即预期的结果长度),因为您要用None
替换空记录。将列表中的某些项目替换为其他项目,但实际上不删除这些项目会导致列表大小相同。 None
是object
,可以是Option
类型的值之一。
实现理想结果的一些方法是:
outputList1.filter(_.nonEmpty)
很简单,过滤掉空字符串。
outputList1.map(record => if (record.nonEmpty) Some(record)) else None).flatten
稍微复杂一点,这会将每个非空记录替换为Some(<record>)
,每个空字符串替换为None
。结果列表[Option [String]](两种选项类型的Some
和None
的混合)可以使用.flatten
轻松展平。这将从Some
中提取值,并从结果列表中删除None
。
outputList1.collect(case record if (record.nonEmpty) => record)
收集类似于地图的作品,期望在发生与其部分功能匹配错误的情况下不会抛出异常。答案 1 :(得分:2)
outputList1.filter(_.isNotNull).size
没有这样的库方法isNotNull
,如果这不是你想要的,因为空字符串与null
不同。
除此之外,看起来你可能没有处理实际的空字符串。字符串"()"
不为空。它有2个字符。试试outputList1.filter(_.length > 2)
(或任何长度是你的实际限制)。