如何将scala.xml.Attribute序列转换为scala.xml.MetaData?

如何将scala.xml.Attribute序列转换为scala.xml.MetaData?,scala,scala-xml,Scala,Scala Xml,这里没有什么可补充的。当然,我能够用命令式的编码风格以某种方式完成它,但我很好奇如何很好地解决这个问题 def this( arguments: Seq[(String, String)], merges: Seq[(String, String)]) = this { val metadata: Seq[Attribute] = ( arguments ++ merges ).groupBy( _._1 ).map { case (key, value) =&g

这里没有什么可补充的。当然,我能够用命令式的编码风格以某种方式完成它,但我很好奇如何很好地解决这个问题

def this( arguments: Seq[(String, String)], merges: Seq[(String, String)]) = this
{
    val metadata: Seq[Attribute] = ( arguments ++ merges ).groupBy( _._1 ).map
    {
        case (key, value) => Attribute( None, key, Text( value.map( _._2 ).mkString( " " ) ), Null )
    }

    var result: MetaData = Null

    for( m <- metadata ) result = result.append( m )

    result
}
def this(参数:Seq[(String,String)],merges:Seq[(String,String)])=this
{
val元数据:Seq[Attribute]=(参数++合并).groupBy(u._1).map
{
大小写(键,值)=>属性(无,键,文本(value.map(u._2).mkString(“”),Null)
}
变量结果:元数据=Null
对于(m这个怎么样

metadata.fold(Null)((soFar, attr) => soFar append attr)
所以,如果你愿意的话,你可以完全去掉中间变量。 全文:


谢谢你给我指出fold。到目前为止,我一直忽略了这个方法,因为foldLeft和丑陋的类型错误一直困扰着我。
。fold(Null)(\uappend)
正是我需要的。
def foo(arguments: Seq[(String, String)], merges: Seq[(String, String)]) =
  (arguments ++ merges).groupBy(_._1).map {
    case (key, value) => Attribute(None, key, Text(value.map(_._2).mkString(" ")), Null)
  }.fold(Null)((soFar, attr) => soFar append attr)