コレクションに要素を条件付きでのみ追加する最良の方法を見つけようとしています。説明してみましょう。
させて:
val a="1234"
val b="1arst"
val c=""
(私がcolemakレイアウトを使用していることがわかります)
マップを作成したいのですが、長さが 1 より大きい場合にのみ要素を含めます。
私は行くことができます:
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[シリアライズ可能な製品] = List((test,test), List(), (test,テスト))
長さ 0 のアイテムを削除するためにすべての要素をもう一度フィルタリングせずに、これを行うより効率的な方法はありますか?