Pergunta

Ok, essa pergunta parece ser realmente estúpida, mas meu argumento é que, se você dar uma olhada na API Scala 2.7.6, eles haviam feito o método do MappingToString depreciado. Portanto, deve haver uma alternativa mais elegante para imprimir mapa formatado personalizado. Como para quase qualquer finalidade, ter o método de equivalência de mkString no mapa é realmente útil.

O que vocês acham sobre isso? Qual é o seu snippet de codificação para imprimir um mapa, exceto o println?

Foi útil?

Solução

o mappingToString O método foi usado para alterar como cada par de chave/valor foi traduzido para string, que foi então usado pelo toString método.

Eu acho que é um péssimo ajuste. Ele adiciona uma mutabilidade a uma estrutura de dados imutável, por um lado. Se você tiver requisitos de impressão específicos, provavelmente é melhor colocá -los em outra classe.

Outras dicas

mappingToString foi específico para Map.

Com a nova estrutura de coleções em scala2.8, um Map pode ser iterado por qualquer IterableLike , que se estende Traversablelike.

O método MkString (já está lá em 2.7 para Iterable) deve ser então usado.

Veja isso Postagem do blog "Strings" de Jesse, para 2.7 mkstring() exemplos:

/*
   Making use of raw strings to create a multi line string
   I add a | at the beginning of each line so that we can line up the quote nicely 
   in source code then later strip it from the string using stripMargin
*/
scala> val quote = """|I  don-t consider myself a pessimist.                                                                                                 
     |                |I think of a pessimist as someone who is waiting for it to rain.
     |                |And I feel soaked to the skin.
     | 
     |                |Leonard Cohen"""
quote: java.lang.String = 
|I don-t consider myself a pessimist. 
                      |I think of a pessimist as someone who is waiting for it to rain.
                      |And I feel soaked to the skin.

                      |Leonard Cohen

// capilize the first character of each line
scala> val capitalized = quote.lines.
     |                         map( _.trim.capitalize).mkString("\n")
capitalized: String = 
|I don-t consider myself a pessimist.
|I think of a pessimist as someone who is waiting for it to rain.
|And I feel soaked to the skin.

|Leonard Cohen

// remove the margin of each line
scala> quote.stripMargin        
res1: String = 
I don-t consider myself a pessimist. 
I think of a pessimist as someone who is waiting for it to rain.
And I feel soaked to the skin.

Leonard Cohen

// this is silly.  I reverse the order of each word but keep the words in order
scala> quote.stripMargin.         
     |       lines.               
     |       map( _.split(" ").   
     |              map(_.reverse).
     |              mkString (" ")).
     |      mkString("\n")
res16: String = 
I t-nod redisnoc flesym a .tsimissep
I kniht fo a tsimissep sa enoemos ohw si gnitiaw rof ti ot .niar
dnA I leef dekaos ot eht .niks

dranoeL nehoC

Você também pode combinar Iterator.map() com mkString(), por exemplo, para criar uma corda de consulta a partir de um map[String,String]:

val queryString = updatedMap.map(pair => pair._1+"="+pair._2).mkString("?","&","")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top