![](/img/trans.png)
[英]Does Scala have a library method to wrap nullable return values in an Option?
[英]Does Scala have a library method to build Option-s that takes into account empty strings?
我想過濾掉空字符串以將它們放入Option中。 因此,我現在快速構建了這個:
def StrictOption(s: String) = s match {
case s if s != null && s.trim.length() > 0 => Some(s)
case _ => None
}
問題:這可能已經在標准庫中了嗎?
我認為標准庫中沒有一種方法可以執行此操作,但是您可以比實現更簡潔。
Option(s).filter(_.trim.nonEmpty)
如果您完全關心性能,那么
if (s.trim.isEmpty) None else Some(s)
在我的基准測試中(47 vs 141),僅比Ben James的解決方案長4個字符,並且運行速度快了3倍。
沒有內置的東西。 如果性能不是問題(例如,您正在驗證用戶輸入),則Ben的篩選器是最好的簡短版本。 通常,性能不會成為問題。
另外,請注意,當您實際上不匹配任何內容時,使用match
有點奇怪; 獲得if-else語句只是樣板。 說啊
if (s ne null && s.trim.length > 0) Some(s) else None
除非您想編寫自己的is-it-whitespace方法,否則它幾乎和任何東西一樣快速而簡短。 請注意, trim
使用一個特殊的標准:大於\\ u0020(即'')的任何內容都不會被修剪,而等於或小於此值的任何東西都將被修剪。 因此,如果此操作的性能特別重要,那么您也可以編寫自己的修剪字符串為空的檢測器:
def ContentOption(s: String): Option[String] = {
if (s ne null) {
var i = s.length-1
while (i >= 0) {
if (s.charAt(i) > ' ') return Some(s)
i -= 1
}
}
None
}
從Scala 2.13
開始,對於那些不希望使用null
(非Java上下文)的用戶,現在可以使用Option::unless
和Option::when
作為替代選項:
// val str = "hello"
Option.unless(str.isEmpty)(str)
// Option[String] = Some(hello)
Option.when(str.nonEmpty)(str)
// Option[String] = Some(hello)
// val str: String = ""
Option.unless(str.isEmpty)(str)
// Option[String] = None
Option.when(str.nonEmpty)(str)
// Option[String] = None
這也可以通過理解來實現
val res = for (v <- Option(s) if s.nonEmpty) yield v
Option(“某物”)產生Some(“某物”)
選項(空)產生無
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.