集合中的可选元素取决于条件,在scala中没有额外的过滤

时间:2013-03-27 09:09:28

标签: scala

我正在尝试找到仅有条件地将一个元素添加到集合的最佳方法。让我试着解释一下。

让:

val a="1234"
val b="1arst"
val c="" 

(你可以看到我正在使用我打赌的colemak布局)

我想创建一个地图,但只有当它的长度大于一时才包含一个元素。

我可以去:

Map("a" -> a, "b" ->b, "c"->c).filter(_._2.length>0)

给了我想要的地图:

res7: scala.collection.immutable.Map[java.lang.String,java.lang.String] = 
Map(a -> 1234, b -> 1arst)

我也可以这样做:

Map(
if(a.length>0) "a"->a else "" -> "" ,
if(b.length>0) "b"->b else "" -> "" , 
if(c.length>0) "c"->c else "" -> "" ) 

但这会在地图中给我一个不受欢迎的空字符串值,我仍需要过滤:

res12: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(a -> 1234, b -> 1arst, "" -> "")

所以我在考虑对Nil使用右关联运算符,但是这也不起作用,因为你最终得到列表中的空列表项。

  

阶> “测试” - > “test”:: Nil ::“test” - >“test”:: Nil res1:   列表[可序列化产品] =列表((测试,测试),列表(),   (测试,测试))

有没有更有效的方法来完成这项工作,而不是第二次过滤掉所有元素以删除任何0长度的项目?

0 个答案:

没有答案