怎么写(String):Int函数?

时间:2010-10-18 14:12:00

标签: scala

我想使用map方法将Array[String]转换为Array[Int]。将(String) => Int类型的函数作为map参数传递的最短方法是什么?

我更喜欢以某种方式转换现有的内置类似Integer.valueOf。 <{1}}之类的参数绑定方法缩短了结构也很棒。

4 个答案:

答案 0 :(得分:17)

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

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)

答案 1 :(得分:3)

首先,让我们定义一个字符串数组:

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

最明显的方法是使用Scala的toInt(),可用于字符串:

定义:

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

(注意:toString,在其他地方定义,只是将StringLike对象转换为Java字符串)

您的代码:

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

Integer.valueOf()也有效,但请注意,您将获得Array[Integer]而不是Array[Int]

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

虽然我们正处于理解状态,但理解能力几乎同样有效,除非您自己调用toInt,而不是将其传递给map()

scala> for (i<-foo) yield i.toInt
res2: Array[Int] = Array(1, 2, 3)

答案 2 :(得分:2)

这很简单:

Array("1", "2", "3") map Integer.valueOf

答案 3 :(得分:0)

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

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