2017-05-13 46 views
0

我有一個很長的問題,但是我真的不知道如何替換它。Long if else具有多個條件 - 如何替換它?

List<Comment> commentList; 
if (EnumUtils.isValidEnum(Comment.State.class, state) && ordered && petUuid == null) { 
    commentList = commentRepository.findByStateOrderByCreatedDesc(Comment.State.valueOf(state)); 
} else if (EnumUtils.isValidEnum(Comment.State.class, state) && !ordered && petUuid == null) { 
    commentList = commentRepository.findByState(Comment.State.valueOf(state)); 
} else if (state == null && ordered && petUuid == null) { 
    commentList = commentRepository.findAllByOrderByCreatedDesc(); 
} else if (state == null && !ordered && petUuid == null) { 
    commentList = commentRepository.findAll(); 
} else if (EnumUtils.isValidEnum(Comment.State.class, state) && !ordered && petUuid != null) { 
    commentList = commentRepository.findByPetUuidAndByState(petUuid, Comment.State.valueOf(state)); 
} else if (EnumUtils.isValidEnum(Comment.State.class, state) && ordered && petUuid != null) { 
    commentList = commentRepository.findByPetUuidAndByStateOrderByCreatedDesc(petUuid, Comment.State.valueOf(state)); 
} else if (state == null && !ordered && petUuid != null) { 
    commentList = commentRepository.findByPetUuid(petUuid); 
} else if (state == null && ordered && petUuid != null) { 
    commentList = commentRepository.findByPetUuidOrderByCreatedDesc(petUuid); 
} else { 
    throw new WrongEnumValueException(Comment.State.class); 
} 

我在谷歌閱讀,如果是良好的多聯開關語句,但我有多個條件,在這裏,所以我不知道如何解決這個問題:/我需要比這長的if else語句,因爲更好的解決方案這只是醜陋的。

+1

看起來你想創建一個應該處理所有可能的參數組合的超級神方法嗎?這是非常難以閱讀和支持的。你應該重構你的代碼以避免使用這種方法 –

回答

1

開關/箱不會讓你的陳述更簡單。對布爾代數進行一些研究,以及如何簡化它,例如與卡諾地圖。

https://en.wikipedia.org/wiki/Karnaugh_map

正如你在你的代碼有很多重複的(狀態== NULL),你最終可能會與一些嵌套if statements,這將使你的代碼至少有一點更具可讀性。