6

I am trying to calculate the occurrence list of each character in a word, my current codes looks like this:

"hello"
  .groupBy((x:Char)=>x)
  .map(a=>(a._1, a._2.length))

I think the .groupBy((x:Char)=>x) looks clumsy and therefore rewrite like this:

"hello"
  .groupBy(_)
  .map(a=>(a._1, a._2.length))

But then the compiler throw an error

Error:(1, 18) missing parameter type for expanded function ((x$1) => "hello".groupBy(x$1).map(((a) => scala.Tuple2(a._1, a._2.length))))
"hello".groupBy(_).map(a=>(a._1, a._2.length))

            ^

Does anyone have ideas about this? Or is there better way to write this?

Hanfei Sun
  • 45,281
  • 39
  • 129
  • 237

1 Answers1

11

x.groupBy(_), like any method x.foo(_), means "turn this method into a function", i.e. y => x.groupBy(y).

Because _ is used for many things, it also can mean "plug in the value here". However, the "plug in identity" doesn't work because of the meaning above.

You can do x => x or identity to get what you intend by _.

Rex Kerr
  • 166,841
  • 26
  • 322
  • 407