2017-09-04 55 views
0

我有這樣一個邏輯可能的方式來重複使用重複的邏輯和getOrElse鏈接在斯卡拉

if(condition) statement1 else if(condition) statement2 else ....... 

代碼:

val a: Option[String] = if (source == "abc") Some(source) else None 
val b: Option[String] = if (source == "cdf") Some(source) else None 
......nor 3 4 statments as above 

val test: String = a.getOrElse(b.getOrElse(StringUtils.EMPTY)) 

問:

  1. 任何人都可以提出一個更好的辦法以邏輯功能的方式重用代碼?
  2. getOrElse鏈接的任何替代方法?

更新

通過「重用」我的意思是如果我有七八個,如果條件。任何方式來概括內部條件,如果然後重新使用它?我想創建一個過濾器。 我是Scala的新手,我不確定我們是否可以使用高階函數或任何其他方法。

回答

1

從你的例子中不清楚,你究竟在做什麼。 編寫if的功能方法是.filter,您可以使用.orElse而不是.getOrElse ...但我不完全理解將這些多重任務以及字符串轉換爲選項並將其轉換爲書寫方式的目的。最有可能的是,它們是不必要的,而且有更好的方式去做你想做的事情,但是很難在沒有理解你實際需要的東西的情況下提出建議。

val a = Option(source).filter(_ == "abc") 
val b = Option(source).filter(_ == "cdf") 

val test = a orElse b getOrElse("") 

或者,你可以只寫:

val test = Option(source).filter(Set("abc", "cdf")).getOrElse("") 

甚至:

val test = source match { 
    case "abc"|"cdf" => source 
    case _ => "" 
} 
+0

更新了問題希望現在澄清 – coder25

0
val test = source match 
{ 
    case "abc" => /* your code here */ 
    case "cdf" => /* your code here */ 
    ... 
    case _ => None 
} 
0

與否則容易非常相似,這對我來說是操縱選項更清晰的方式:

a.orElse(b).getOrElse(StringUtils.EMPTY)