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;
}
4
A
回答
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
)
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
相关问题
- 1. 这个Scala代码如何看待惯用的C#?
- 2. 你会如何编写这个查询?
- 3. 你会如何在Ruby和/或Haskell中编写这个Clojure代码片段?
- 4. 你会如何递归编写这段代码?
- 5. 你会如何在VB.NET中写这个?
- 6. 你会如何在Javascript中写这个?
- 7. 你会如何做这个PHP代码?
- 8. 我如何在2D java代码中编写这个方程
- 9. 我该如何改进用Scala编写的这段代码?
- 10. 如何写这个XML的Java代码
- 11. 你会如何在php中编写这个objective-c循环?
- 12. 如何编写单行scala代码?
- 13. 你会如何重构这段代码?
- 14. 你会如何重构这段代码?
- 15. 编写通用的代码在Java中
- 16. 如何在Scala中编写有效的类型有界代码
- 17. 如何以惯用/功能方式编写此代码?
- 18. .htaccess代码,这个例子很好的编码习惯吗?
- 19. 我如何在pep/8中编写这个c代码?
- 20. 如何在F#中编写这个异步IO C#代码?
- 21. 如何在java代码中编写多于两个getPoolElements的代码?
- 22. 如何使用状态monad编写这个简单的代码?
- 23. 我如何写这个代码在vb.net
- 24. 你会如何编写一个在android上使用的库?
- 25. 你会如何结合这个WordPress的短代码模板代码?
- 26. 如何在DStream中应用RDD函数,同时在scala中编写代码
- 27. 你会如何重构这个LINQ代码?
- 28. 你会如何改进这个表单验证代码?
- 29. 如何在Scala中编写'通用'mergesort?
- 30. 你会如何编写这样的:网破的形状
`def testParam(s:String)= StringUtils.isNotBlank(request.getParameter(s)) - nice! – 2010-12-23 15:43:40
@Fabian - 你的回答也非常明智,如果我见过你的话,我就不会加入我的答案。 (我输入了我的名字,然后必须去AFK,然后在我回来时点击发送。) – 2010-12-23 16:35:22