1

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

让:

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 使用右关联运算符,但这也不起作用,因为您最终会在列表中得到一个空的列表项。

scala> "test" -> "test" :: Nil :: "test"->"test" :: Nil res1: List[Product with Serializable] = List((test,test), List(), (test,测试))

有没有更有效的方法来完成这项工作,而无需再次过滤所有元素以删除任何长度为 0 的项目?

4

0 回答 0