Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write (String): Int function?

Tags:

scala

I'd like to convert an Array[String] to an Array[Int], using map method. What is the shortest way to get a function of type (String) => Int to pass as map argument?

I'd prefer convert existing builtin ones like Integer.valueOf in some way. A method of argument binding to shorten the construction like def parseInt(s:String) = Integer.parseInt(s, 10) would also be great.

like image 828
Basilevs Avatar asked Oct 18 '10 14:10

Basilevs


2 Answers

scala> Array("1", "2", "3") map(_.toInt)
res4: Array[Int] = Array(1, 2, 3)

or

scala> def parseInt(s:String) = Integer.parseInt(s, 10)
parseInt: (s: String)Int

scala> Array("1", "2", "3") map parseInt
res7: Array[Int] = Array(1, 2, 3)
like image 188
Vasil Remeniuk Avatar answered Oct 11 '22 18:10

Vasil Remeniuk


First, let's define an array of strings:

scala> val foo = Array("1", "2", "3")
foo: Array[java.lang.String] = Array(1, 2, 3)

The most obvious way would be to use Scala's toInt(), available on strings:

Definition:

// StringLike.scala
def toInt: Int         = java.lang.Integer.parseInt(toString)

(Note: toString, defined elsewhere, simply converts the StringLike object to a Java string)

Your code:

scala> foo.map(_.toInt)
res0: Array[Int] = Array(1, 2, 3)

Integer.valueOf() also works, but notice you will get Array[Integer] instead of Array[Int]:

scala> foo.map(Integer.valueOf)
res1: Array[java.lang.Integer] = Array(1, 2, 3)

While we're at it, a for comprehension would work almost as well, except you'd be invoking toInt yourself, instead of passing it over to map()

scala> for (i<-foo) yield i.toInt
res2: Array[Int] = Array(1, 2, 3)
like image 23
nadavwr Avatar answered Oct 11 '22 17:10

nadavwr