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.
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)
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With