不能直接抛出异常或者提前return的
不能直接抛出异常或者提前return的
不能直接抛出异常或者提前return的
这个是大致的流程
需要三重判断,大概逻辑是判断字符串是否为空,不为空,执行查询语句,结果再判断是否为空,不为空添加进对象内,并且修改标志为false
public static void main(String[] args) {
boolean flag = true;
//根据主键查数据
String byId = "111";
//s是byId的一个字段,不只是根据s查数据,还有x,y,z等也是需要查的
String s = "";
//list 是根据字段查出的数据
List<String> list = new ArrayList<>();
if (StringUtils.isNotEmpty(byId)) {
if (StringUtils.isNotEmpty(s)) {
System.out.println("查询语句,得到集合");
if (CollectionUtil.isNotEmpty(list)) {
//不只是需要这个标志物,也需要list等,所以不能直接return什么的
flag = false;
}
}
}
//这只是一个大概的逻辑
System.out.println(flag);
}
已经顺利达到想要的结果
有其他思路,少用if判断吗,这个接口返回的数据较多,我的判断有点多,其中有一个if 包含 16个if 这16个if每个里面还有一个,有什么办法看起来美观一点吗
给个思路:
可以对数据异常点(字符串为空,集合为空,某字段不存在等)进行捕获,有异常直接抛出自定义异常再全局捕获进行处理
异常也可以用断言直接抛
Assert.notEmpty(new ArrayList<>(), "集合不能为空");
大致思路
public static void main(String[] args) {
boolean flag = true;
//根据主键查数据
String byId = "111";
//s是byId的一个字段,不只是根据s查数据,还有x,y,z等也是需要查的
String s = "";
//list 是根据字段查出的数据
List<String> list = new ArrayList<>();
if (StrUtil.isEmpty(byId)){
// TODO: 2022/5/20 抛异常
System.out.println(flag);
return;
}
if (StrUtil.isEmpty(s)){
System.out.println(flag);
return;
}
System.out.println("查询语句,得到集合");
if (CollectionUtil.isEmpty(list)){
System.out.println(flag);
return;
}
flag =false;
System.out.println(flag);
}
你目前的这个例子是没办法了,因为你每一步都是下一步的前置条件,中间还有步骤,没啥好办法优化了,但是你后边说的16组if,如果判断条件类似,可以考虑单独写一个方法封装一下,具体的看不到具体代码,没法提更多建议了
如果 if 都没有else的逻辑,那可以直接if 你现在相反的判断,然后里面return
方法一 if (!StringUtils.isNotEmpty(byId)) { return; } 不满足的话直接返回
方法二 自定义判断方法boolean isValid(xx1,xx2,xx3)
这个需求是已经解决了,就是看各位资深大佬有没有优化的方法,我学习下🤗
看不到具体的代码,前面的逻辑就不说了,关于你说的16个if,如果类似,可以试试使用map改写,可以稍微美观一点。
Stream流+Optional?
你的代码
if(条件1)
{
if(条件2)
{
if(条件3)
{
//数据处理
}
}
}
其实代码等价于
if(条件1 && 条件2 && 条件3)
{
//处理
}
我们知道,与等价于或非,那么可以重新写为
if(!条件1)
{
//异常处理
}
else if(!条件2)
{
//异常处理
}
else if(!条件3)
{
//异常处理
}
else
{
//数据处理
}