public class Test6 {

public static void main(String[] args) {
String[] arrStr1={"00000004", "暂无姓名"};
String[] arrStr4={"00000004", "暂无姓名"};
String[] arrStr2={"2011-10-10", "08:08:59"};
String[] arrStr3={"2011-10-10", "18:08:59"};


Map<String[], String[]> map=new HashMap<String[], String[]>();
map.put(arrStr1, arrStr2);
map.put(arrStr4, arrStr3);


Iterator it=map.keySet().iterator();
while (it.hasNext()) {
String[] key=(String[]) it.next();
String[] value=(String[]) map.get(key);
System.out.println(Arrays.toString(key)+" "+Arrays.toString(value));

}

}

}
如何在key一样的情况下。并且value的第零个元素 也就是日期相等的情况下 计算时间差

解决方案 »

  1.   

    key一样?
    在map中key能一样吗?不太明白你的意思
      

  2.   

    这是个比较普遍的出勤管理的问题吧,你的数据构造还是有问题的,应该把id,name,date一致的数据放到一个list中,就是这个人这一天的打卡记录。特殊的地方的,并不一定这个人一天就正好有两条记录(上下班的),也许他忘了一次。也许他怕没打上,多打了一次。都有可能。你首先要确定的是一个规则。一条记录时怎么办。超过两条时怎么算。有时候1天4个记录都应该是正常的,很可能中间请了两个小时的假。这个地方处理是最复杂的。忘记打卡也还需要人工录入,基本上最后还是需要人工确认。你先把一整套逻辑整理出一个规则吧。
      

  3.   


    因为key是使用数组存储的,只要地址不一样,而输出一样。
    我的意思是如何在key输出一样的情况下,比较value
      

  4.   

    这个程序 本身就有问题从map拿数据 必须要用到arrStr1 或者arrStr4 去读值 那用map还有什么意义???
      

  5.   

    lz就是计算时间差,搞的这么麻烦,map中的key不可以一样的,后面的值会覆盖前面的。
    正如3楼,用list来操作
      

  6.   

    for exampleimport java.util.*;
    public class Test6 {
        
        public static void main(String[] args) {
            String[] arrStr1={"00000004", "暂无姓名"};
            String[] arrStr4={"00000004", "暂无姓名"};
            String[] arrStr2={"2011-10-10", "08:08:59"};
            String[] arrStr3={"2011-10-10", "18:08:59"};
            
            
            Map<String[], String[]> map=new HashMap<String[], String[]>();
            map.put(arrStr1, arrStr2);
            map.put(arrStr4, arrStr3);        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        List<String[][]> list = new ArrayList<String[][]>();
            for (Map.Entry<String[], String[]> entry : map.entrySet()) {
                list.add(new String[][]{entry.getKey(), entry.getValue()});
            }        for (int i=0; i<list.size(); i++) {
                String[] key1 = list.get(i)[0];
                String[] value1 = list.get(i)[1];            for (int j=i+1; j<list.size(); j++) {
                    String[] key2 = list.get(j)[0];
                    String[] value2 = list.get(j)[1];                if (Arrays.equals(key1, key2) && value1[0].equals(value2[0])) {
                        Date d1 = sdf.parse(value1[0] + " " + value1[1]);
                        Date d2 = sdf.parse(value2[0] + " " + value2[1]);
                        long dif = Math.abs(d1.getTime() - d2.getTime());
                        System.out.printf("key1=%s, value1=%s\n", Arrays.toString(key1), Arrays.toString(value1));
                        System.out.printf("key2=%s, value2=%s\n", Arrays.toString(key2), Arrays.toString(value2));
                        System.out.printf("hour:%d, minute:%d, second:%d\n", 
                                          (dif/1000)/3600, ((dif/1000)%3600)/60, (dif/1000)%60);
                    }
                }
            }                
        }
        
    }