List<Map<String,Object> 按照两个规则排序

问题遇到的现象和发生背景

数据如下,如果name属性有值,那就按照name值排序,按照name排序完之后再按照age排序。

问题相关代码,请勿粘贴截图

Map<String, Object> map = new HashMap<String, Object>();
map.put("name", null);
map.put("age", 13);

        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("name", null);
        map2.put("age", 15);

        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("name", null);
        map3.put("age", 20);

        Map<String, Object> map4 = new HashMap<String, Object>();
        map4.put("name", "CC");
        map4.put("age", 50);

        List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
        list.add(map);
        list.add(map2);
        list.add(map3);
        list.add(map4);
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

 list.sort(new Comparator<Map<String, Object>>() {
            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                if (o1 != null && o2 != null && o1.get("name") != null && o2.get("name") != null){
                    int num = ((String)o1.get("name")).compareTo((String)o2.get("name"));
                    if ( num != 0){
                        return num;
                    } else {
                        return ((Integer) o1.get("age")).compareTo((Integer) o2.get("age"));
                    }

                }
                // 为空的放到一起
                return -1;
            }
        });

结果:[{"name":"CC","age":50},{"age":20},{"age":15},{"age":13}]