5

Java イベント ロギング (分析) ライブラリには、次のようなイベント名と文字列の varargs リストを受け取るメソッドがあります。

Analytics.event("my event name", "key1", "value1", "key2", "value2" ...)

イベントパラメーターを次のようなマップに収集しました

Map("key1" -> "value1", "key2" -> "value2" ...)

Mapここで、キーと値が交互になる to リストを平坦化し、イベント メソッドにフィードする方法が必要です。Mapを s のリスト aListに変換するなど、いくつかの推測がありましたがTuple、それに対して .flatten を呼び出すと、

No implicit view available from (java.lang.String, java.lang.String) => scala.collection.TraversableOnce[B]

ここで何が欠けていますか?

4

3 に答える 3

6

flatMap を使用して、すべてのキーと値のペアを 2 つの要素を持つリストにマップし、これらのリストを連結できます。

scala> Map("k1" -> "v1", "k2" -> "v2")
res0: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(k1 -> v1, k2 -> v2)

scala> res0.flatMap { case (k,v) => k::v::Nil }
res1: scala.collection.immutable.Iterable[java.lang.String] = List(k1, v1, k2, v2)

それができたら、リストをイベント メソッドに渡すだけです。

Analytics.event("my event name", res1:_*)
于 2011-11-26T19:05:58.080 に答える
6

: _*次の演算子を使用できます。

def event(name: String, values: String*) {/*...*/}

val params = Map("key1" -> "value1", "key2" -> "value2")
val paramsArr = params flatMap {case(k, v) => List(k, v)} toArray

event("name", paramsArr: _*)

これが Java 可変長引数でも機能するかどうかは不明です (お知らせください!)

于 2011-11-26T19:06:45.193 に答える
1
val m = Map ("key1" -> "value1", "key2" -> "value2", "k3"-> "v3")
val li = m.map ((e)=> List (e._1, e._2)).flatten.toSeq 
event ("name", li: _*)
于 2011-11-26T20:13:18.883 に答える