Как написать (String): Int функцию? - PullRequest
9 голосов
/ 18 октября 2010

Я хотел бы преобразовать Array[String] в Array[Int], используя метод карты.Какой самый короткий способ получить функцию типа (String) => Int для передачи в качестве аргумента карты?

Я бы предпочел каким-либо образом преобразовать существующие встроенные функции, такие как Integer.valueOf.Метод связывания аргументов для сокращения конструкции, такой как def parseInt(s:String) = Integer.parseInt(s, 10), также был бы хорош.

Ответы [ 4 ]

17 голосов
/ 18 октября 2010
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)
3 голосов
/ 18 октября 2010

Во-первых, давайте определим массив строк:

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

Самый очевидный способ - использовать toInt() Scala, доступный для строк:

Определение:

// 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 голосов
/ 18 октября 2010

Это так же просто, как:

Array("1", "2", "3") map Integer.valueOf
0 голосов
/ 18 октября 2010
scala> val strs = Array("1", "2")
strs: Array[java.lang.String] = Array(1, 2)

scala> strs.map(_.toInt)
res0: Array[Int] = Array(1, 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...