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. 你會如何編寫這段代碼從Android到iOS
- 5. 你會如何遞歸編寫這段代碼?
- 6. 你會如何在VB.NET中寫這個?
- 7. 你會如何在Javascript中寫這個?
- 8. 你會如何做這個PHP代碼?
- 9. 使代碼更scala慣用
- 10. 我如何在2D java代碼中編寫這個方程
- 11. 我該如何改進用Scala編寫的這段代碼?
- 12. 如何寫這個XML的Java代碼
- 13. 你會如何在Clojure中編寫這個C++循環?
- 14. 你會如何在PHP中編寫這個指數聲明?
- 15. 你會如何在php中編寫這個objective-c循環?
- 16. 你會如何改寫這行代碼,以便更爲通用
- 17. 如何在java中編寫java代碼在scala模板中播放框架
- 18. 如何在JSF中編寫Java代碼?
- 19. 如何編寫單行scala代碼?
- 20. 如何編寫慣用的Scala包裝類來表示非慣用的JSON
- 21. 你會如何重構這段代碼?
- 22. 你會如何改善這段代碼?
- 23. 你會如何重構這段代碼?
- 24. 編寫通用的代碼在Java中
- 25. 如何在Scala中編寫有效的類型有界代碼
- 26. 如何簡化這個在Scala中使用Option.fold的代碼?
- 27. 如何以慣用/功能方式編寫此代碼?
- 28. .htaccess代碼,這個例子很好的編碼習慣嗎?
- 29. 如何在MySQL中編寫這個MSSQL代碼?
- 30. 如何在Gradle中編寫這個Maven排除代碼?
`def testParam(s:String)= StringUtils.isNotBlank(request.getParameter(s)) - nice! – 2010-12-23 15:43:40
@Fabian - 你的回答也非常明智,如果我見過你的話,我就不會加入我的答案。 (我輸入了我的名字,然後必須去AFK,然後在我回來時點擊發送。) – 2010-12-23 16:35:22