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;
}
答案 0 :(得分: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
)
答案 1 :(得分: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
答案 2 :(得分: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 :(得分:3)
Geoff答案的略微修改版本