2010-12-23 4 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! –

+0

@Fabian - 귀하의 답변도 완벽하게 의미가 있습니다. 내가 너를 본다면 내 대답을 덧붙이 지 않았을거야. (필자는 광산을 입력 한 다음 AFK로 가야하고 돌아 왔을 때 보내기를 누르십시오.) –

+0

첫 줄은 내가 생각하려고했던 빠진 부분이었고 내 대답을 쓸모 없게 만들었습니다. 내 것을보고 당신을 추가했습니다 :-) –

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의 scalaz를 사용

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 

, 당신은 (∘∘) 함수를 지도 맵을 사용할 수 있습니다

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

언제나 그렇듯이 스칼라즈의 경우처럼 스칼라 유형 유추가 부분 적용 유형 생성자를 유추 할 수 없다는 것은 정말로 유감스러운 일입니다. 그렇다면 :

(ps ∘∘ test) collect { case (i, true) => i } headOption orZero 
+0

지도가 올바른 순서로 반복 실행되는 것은 아닙니다. –

+0

좋은 지적입니다. 분명히'Map3'으로 끝날 것이기 때문에이 경우에있을 것입니다. 나는 'Seq'로 바꿨다. –

관련 문제