簡體   English   中英

如何在Scala中將選項[String]轉換為列表[Int]

[英]How to convert an Option[String]to List [Int]in Scala

我可以使用以下代碼將Option [String]轉換為List [String]:

 def convertOptionToListString(a: Option[String]): List[String] = {
    return a.toList.flatMap(_.split(",")) // ex : ("value1", "value2", "value3", etc)
  }

但是我如何將Option [String]轉換為List [Int],所以最后我可以使用整數列表(1,3,5)。 我的Option [String]看起來像這樣:Some(“ 1,3,5”)

請注意,值1,3,5來自從URL發送的params.get(“ ids”) ,而params.getOption [String]

val params = request.queryString.map { case (k, v) => k -> v(0) }

謝謝

如果要將List[String]轉換為List[Int] ,跳過不可解析的值,則可以使用Try

import scala.util.Try

List("1", "2", "3").flatMap(x => Try(x.toInt).toOption)
res0: List[Int] = List(1, 2, 3)

List("1", "2", "abc").flatMap(x => Try(x.toInt).toOption)
res1: List[Int] = List(1, 2)

Scala 2.13引入了String::toIntOption

結合flatMap ,我們可以安全地將String轉換為Int並消除格式錯誤的輸入:

List("1", "2", "abc").flatMap(_.toIntOption)
// List[Int] = List(1, 2)
val a: Option[String] = Some("1,3,5")
val l = a.toList.flatMap(_.split(",")).map(_.toInt)

從您所在的位置,只需將其映射到toInt 但是您的操作順序有點奇怪。 就像您使用toList只是為了滿足類型。 toList是這些臭功能之一,如果您使用它,可能會濫用某些東西。

讀取效果最好的邏輯是,如果您有Some ,則對其進行處理,否則,您默認為空列表(我在猜測):

option match {
  case Some(str) => str.split(",").map(_.toInt)
  case None => List()
}

要么:

option.map(_.split(",").map(_.toInt)).getOrElse(List())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM