满屏的if-else,看我怎么消灭你!

大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述满屏的if-else,看我怎么消灭你!相关的知识,希望能为你提供帮助。

  • 技巧一:提取方法,拆分逻辑
  • 技巧二:分支逻辑提前return
  • 技巧三:枚举
  • 技巧四:函数式接口
  • 技巧五:设计模式
  • 其他技巧
  • 写在最后
在实际的业务开发当中,经常会遇到复杂的业务逻辑,可能部分同学实现出来的代码并没有什么问题,但是代码的可读性很差。
【满屏的if-else,看我怎么消灭你!】本篇文章主要总结一下自己在实际开发中如何避免大面积的 if-else 代码块的问题。补充说明一点,不是说 if-else 不好,而是多层嵌套的 if-else 导致代码可读性差、维护成本高等问题。
现有如下一段示例代码,部分优化技巧是根据这段代码进行的:
public class BadCodeDemo

private void getBadCodeBiz(Integer city, List< TestCodeData> newDataList, List< TestCodeData> oldDataList)
if (city != null)

if (newDataList != null & & newDataList.size() > 0)
TestCodeData newData = https://www.songbingjia.com/android/newDataList.stream().filter(p ->
if (p.getIsHoliday() == 1)
return true;

return false;
).findFirst().orElse(null);
if (newData != null)
newData.setCity(city);



else

if (oldDataList != null & & newDataList != null)
List< TestCodeData> oldCollect = oldDataList.stream().filter(p ->
if (p.getIsHoliday() == 1)
return true;

return false;

).collect(Collectors.toList());
List< TestCodeData> newCollect = newDataList.stream().filter(p ->
if (p.getIsHoliday() == 1)
return true;

return false;
).collect(Collectors.toList());

if (newCollect != null & & newCollect.size() > 0 & & oldCollect != null & & oldCollect.size() > 0)
for (TestCodeData newPO : newCollect)
if (newPO.getStartTime() == 0 & & newPO.getEndTime() == 12)
TestCodeData po = oldCollect.stream().filter(p -> p.getStartTime() == 0
& & (p.getEndTime() == 12 || p.getEndTime() == 24)).findFirst().orElse(null);
if (po != null)
newPO.setCity(po.getCity());

else if (newPO.getStartTime() == 12 & & newPO.getEndTime() == 24)
TestCodeData po = oldCollect.stream().filter(
p -> (p.getStartTime() == 12 || p.getStartTime() == 0)
& & p.getEndTime() == 24).findFirst().orElse(null);
if (po != null)
newPO.setCity(po.getCity());

else if (newPO.getStartTime() == 0 & & newPO.getEndTime() == 24)
TestCodeData po = oldCollect.stream().filter(
p -> p.getStartTime() == 0 & & p.getEndTime() == 24).findFirst().orElse(null);
if (po == null)
po = oldCollect.stream().filter(
p -> p.getStartTime() == 0 & & p.getEndTime() == 12).findFirst().orElse(null);

if (po == null)
po = oldCollect.stream().filter(
p -> p.getStartTime() == 12 & & p.getEndTime() == 24).findFirst().orElse(null);

if (po != null)
newPO.setCity(po.getCity());

else if (newPO.getTimeUnit().equals(Integer.valueOf(1)))
TestCodeData po = oldCollect.stream().filter(
e -> e.getTimeUnit().equals(Integer.valueOf(1))).findFirst().orElse(null);
if (po != null)
newPO.setCity(

    推荐阅读