java 如图 if里面多null的判断,看着好难受,如何优化代码?

图片说明

一点都不难受,这是正常逻辑,如果实在要优化,就要根据实际需求看能不能改进了

你是判断整个paramsMap中是否有null吗?如果是可以遍历这个map,外面设定一个布尔的flag,只要遍历到null就设定flag为false,跳出循环

Map<String,Object> map = new HashMap<>();
        map.put("zhangsan","18");
        map.put("lisi","17");
        map.put("wangwu","16");
        map.put("test",null);
        boolean flag = true;

        for(Map.Entry<String,Object> entry : map.entrySet()){
            if(entry.getValue() == null){
                flag = false;
                break;
            }
        }

        if(flag){
            System.out.println("参数不为空");
        }else{
            System.out.println("有参数为空");
        }

如果想要优化的这种重复的判断的话执行效率就会变慢,我想到的做法是你先在公共实体类中或者项目初始化时创建一个static List list = new ArrayList集合,提前将不能为空的那些键的名称存储进来供全局调用。在需要判断map集合对应键的值不能为空时就遍历map集合并把键与list集合中的值做比对,如果一样就判断值是否为空,为空就返回。

lass TestA{
    static List<String> list = new ArrayList<String>(){
        {
            add("a");
            add("b");
        }
    };
    public static void main(String[] args){
        Map<String,Integer> map = new HashMap<>();
        map.put("a",1);
        map.put("b",null);
        map.put("c",3);
        for (String s : map.keySet()){
            for(String ss : list){
                System.out.println(s+"==="+ss);
                if(s.equals(ss)){
                    if(null == map.get(s)){
                        System.out.println("为null");
                    }
                }
            }
        }
    }
}

直接上代码吧

public static void main(String[] args) {
        Map<String,Object> map = new HashMap<>();
        map.put("aaa","123");
        map.put("bbb","321");
        map.put("ccc","123");
        //将需要检空的key写入
        String[] arr = {"aaa","bbb"};
        if (!test1(map, arr)) {
            System.out.println("为空返回错误!");
        }
    }

    private static boolean test1(Map<String,Object> map, String[] strs){
        boolean temp = true;
        Set<String> set = map.keySet();
        List<String> list = Arrays.asList(strs);
        for (String key : set) {
            if (list.indexOf(key) != -1){
                if (map.get(key) == null) temp = false;
            }
        }
        return temp;
    }

并没有什么即保证效率又简洁的方法,给你一个可以简化2句的静态方法

    /**
     * 校验对象是不是null
     */
    public static boolean isNull(Object... objs) {
        for (Object obj : objs) {
            if (obj == null) {
                return true;
            }
        }
        return false;
    }

问答版主就是牛,从现在起只回论坛,不在踏入问答半步