Anyを配列またはSeqとして扱い、可能であればそれを反復処理する方法を探しています。
現在、私はこのようなコードをいくつか持っており、Anyのシーケンスを取得し、含まれているTraversableオブジェクトまたはArrayオブジェクトをフラット化します。
def flattenAsStrings(as: Seq[Any]): Seq[String] = {
val (travValued, other) = as.partition(a => classOf[Traversable[_]] isAssignableFrom(a.getClass))
val (arrayValued, singleValued) = other.partition(a => a.isInstanceOf[Array[_]])
val travStrings = travValued.map(_.asInstanceOf[Traversable[_]].map(_.toString)).flatMap(_.toList)
val arrayStrings = arrayValued.map(_.asInstanceOf[Array[_]].map(_.toString)).flatMap(_.toList)
singleValued.map(_.toString) ++ travStrings ++ arrayStrings
}
暗黙の変換などを考えると、Scalaでこれを行うためのより簡単な方法があるはずだと感じています。誰?