long if if语句有多个条件 - 如何替换它?

时间:2017-05-13 18:13:07

标签: java

我有一个很长的问题,如果没有,但我真的不知道如何更换它。

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 if switch语句,但我有多个条件,所以我不知道如何解决这个问题:/我需要一些更好的解决方案,而不是这个长的if语句,因为它只是丑陋。

1 个答案:

答案 0 :(得分:1)

Switch / Case不会使您的陈述更简单。对布尔代数进行一些研究以及如何简化它,例如与卡诺图。

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

由于你的代码中有很多重复(state == null),你最终可能会得到一些嵌套的if statements,这将使你的代码至少更具可读性。