2010-12-23 42 views
4
int increment = 0; 

if (StringUtils.isNotBlank(request.getParameter(NEXT_SCREEN_PARAMETER_NAME))) { 
    increment = 1; 
} else if (StringUtils.isNotBlank(request.getParameter(PREV_SCREEN_PARAMETER_NAME))) { 
    increment = -1; 
} else if (StringUtils.isNotBlank(request.getParameter(LAST_SCREEN_PARAMETER_NAME))) { 
    increment = Integer.MAX_VALUE; 
} 

回答

12

我想你會盡量避免這種方式來開始建立的問題,但如果這是你不得不處理什麼,我覺得最明顯的將是這樣

def testParam(s: String) = StringUtils.isNotBlank(request.getParameter(s)) 
val increment = (
    if (testParam(NEXT_SCREEN_PARAMETER_NAME)) 1 
    else if (testParam(PREV_SCREEN_PARAMETER_NAME)) -1 
    else if (testParam(LAST_SCREEN_PARAMETER_NAME)) Int.MaxValue 
    else 0 
) 
+0

`def testParam(s:String)= StringUtils.isNotBlank(request.getParameter(s)) - nice! – 2010-12-23 15:43:40

+0

@Fabian - 你的回答也非常明智,如果我見過你的話,我就不會加入我的答案。 (我輸入了我的名字,然後必須去AFK,然後在我回來時點擊發送。) – 2010-12-23 16:35:22

3

你可以這樣做:

val conditions = Seq((NEXT_SCREEN_PARAMETER_NAME,1), 
        (PREV_SCREEN_PARAMETER_NAME,-1), 
        (LAST_SCREEN_PARAMETER_NAME,Integer.MAX_VALUE)) 
def parameterDefined(p: String) = StringUtils.isNotBlank(request.getParameter(p)) 
val increment = conditions.find(x => parameterDefined(x._1)).map(_._2).getOrElse(0) 

這定義了適當的增加值對每個參數,找到的第一個定義的參數,如果沒有找到匹配提取增值收益0。

3

略體改版本傑夫的ansver的

object ScreenParam { 
    def unapply(kv:Tuple2[String, Int]) = 
    if(StringUtils.isNotBlank(request.getParameter(kv._1))) Some(kv._2) else None 
} 

val conditions = Seq((NEXT_SCREEN_PARAMETER_NAME,1), 
         (PREV_SCREEN_PARAMETER_NAME,-1), 
         (LAST_SCREEN_PARAMETER_NAME,Integer.MAX_VALUE)) 

conditions.collect{ case ScreenParam(value) => value}.getOrElse(0) 
4
val ps = Seq(1 -> NEXT_SCREEN_PARAMETER_NAME, 
      -1 -> PREV_SCREEN_PARAMETER_NAME, 
      Int.MaxValue -> LAST_SCREEN_PARAMETER_NAME) 

val test = StringUtils.isNotBlank(request.getParameter(_ : String)) 
(ps.view map { case (i,n) => i -> test(n) }) collect { case (i, true) => i } headOption getOrElse 0 

使用scalaz,您可以使用地圖(∘∘)功能:

ps.∘∘[PartialApply1Of2[Tuple2, Int]#Apply, String, Boolean](test) 
    collect { case (i, true) => i } headOption orZero 

和Scalaz一樣,scala的類型推斷不能推斷部分應用類型的構造函數是一個真正的恥辱。然後你會有:

(ps ∘∘ test) collect { case (i, true) => i } headOption orZero 
相關問題