三个刁钻的android题,在线等!!!!

一、从某数据库接口得到如下值:
{
rows: [
["Lisa", 16, "Female", "2000-12-01"],
["Bob", 22, "Male", "1996-01-21"]
],
metaData: [
{name: "name", note: ''},
{name: "age", note: ''},
{name: "gender", note: ''},
{name: "birthday", note: ''}
]
}

rows是数据,metaData是对数据的说明。现写一个函数,将上面的Object转化为期望的数组:
[
{name: "Lisa", age: 16, gender: "Female", birthday: "2000-12-01"},
{name: "Bob", age: 22, gender: "Male", birthday: "1996-01-21"},
]

二、写一个函数,判断给定的日期是几月的第几周,当月1日属于上一月的,该周计入上一月。例如:
1)输入日期2016-02-01,返回结果为2-1,表示2016年2月1日属于2月的第一周;
2)输入日期2016-09-01,返回结果为8-5,表示2016年9月1日属于8月的第五周。
(这里计算一周是从周一到当周周天算为一周;某天是属于某月的某一周的。以2016年4月为例:4月4日至10日为4月的第一周;4月1日至3日不属于4月的周次,而是归入3月计算。)

三、数组 a = [
{id: 10001, name: "Lisa", age: 16},
{id: 10002, name: "Bob", age: 22},
{id: 10003, name: "Alice", age: 20},
];

数组 b = [
{id: 10001, gender: "Female"},
{id: 10002, name: "Bob King", birthday: "1996-01-22"},
{id: 10005, name: "Tom", birthday: "2000-01-01"},
];

写一个函数按id用b更新a,期望得到的结果为:
[
{id: 10001, name: "Lisa", age: 16, gender: "Female"},
{id: 10002, name: "Bob King", birthday: "1996-01-22", age: 22},
{id: 10003, name: "Alice", age: 20},
{id: 10005, name: "Tom", birthday: "2000-01-01"},
]

图片说明

图片说明

/**
 * 获取指定日期所在月的第一天
 * @param c
 * @return
 */
public static Calendar getFirstDayOfMonthCalendar(Calendar c){
    Calendar firstDayOfMonthCalendar = Calendar.getInstance();
    firstDayOfMonthCalendar.setTimeInMillis(c.getTimeInMillis());
    firstDayOfMonthCalendar.set(Calendar.DAY_OF_MONTH, 1);
    return firstDayOfMonthCalendar;
}
/**
 * 获取指定日期所在月的第一个星期一
 * @param c
 * @return
 */
public static Calendar getFirstMondayOfMonthCalendar(Calendar c){
    Calendar firstDayOfMonthCalendar = getFirstDayOfMonthCalendar(c);
    Calendar firstMondayOfMonthCalendar = firstDayOfMonthCalendar;
    int dayOfWeek = firstDayOfMonthCalendar.get(Calendar.DAY_OF_WEEK);
    if(dayOfWeek==1){
        firstMondayOfMonthCalendar.add(Calendar.DATE, 1);
    }else if(dayOfWeek==2){

    }else{
        firstMondayOfMonthCalendar.add(Calendar.DATE, 7-dayOfWeek+2);
    }
    return firstMondayOfMonthCalendar;
}

/**
 * 2: 判断给定的日期是几月的第几周
 * @param dateStr yyyy-MM-dd
 * @return
 * @throws ParseException 
 */
public static String getWeekOfMonth(String dateStr) throws ParseException{
    //生成指定日期
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    Date date = dateFormat.parse(dateStr);
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    //
    int month = c.get(Calendar.MONTH);
    int week = 1;
    //获取指定日期所在月的第一个星期一
    Calendar firstMondayOfMonthCalendar = getFirstMondayOfMonthCalendar(c);
    System.out.println("firstMondayOfMonthCalendar:"+new Date(firstMondayOfMonthCalendar.getTimeInMillis()));
    //比较指定日期和第一个星期一
    if(c.compareTo(firstMondayOfMonthCalendar)==0){
        //指定日期 = 第一个星期一
        week=1;
    }else{
        if(c.compareTo(firstMondayOfMonthCalendar)>0){
            //指定日期 > 第一个星期一 不处理
        }else{
            //指定日期 < 第一个星期一,为上一个月
            firstMondayOfMonthCalendar.add(Calendar.DATE, -7);
            month = firstMondayOfMonthCalendar.get(Calendar.MONTH);
            firstMondayOfMonthCalendar = getFirstMondayOfMonthCalendar(firstMondayOfMonthCalendar);
        }
        //计算当前日期与 第一个星期一的差值
        long moreDay = (c.getTimeInMillis()-firstMondayOfMonthCalendar.getTimeInMillis())/(3600*24*1000);
        System.out.println("moreDay:"+moreDay);
        week = week+(int)(moreDay/7);
    }
    return dateStr+"是第"+(month+1)+"月第"+week+"周";
}