现在有多个用户。任意的时间段有上网行为,需要将用户上网的时间段合并。
样例输入数据
用户id begintimeendtime
1 9:30 9:50
2 9:10 9:20
1 9:40 10:00
2 9:00 9:15
1 10:10 10:20
输出结果
1 09:30 10:00
1 10:10 10:20
2 09:00 09:20
package test;
import java.io.BufferedInputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap;
public class test {
static Scanner cin = new Scanner(new BufferedInputStream(System.in));
public static void main(String[] args) throws Exception {
List<UserTime> usertime = new ArrayList<UserTime>();
SimpleDateFormat sdf=new SimpleDateFormat("HH:mm");
//输入数据
while(cin.hasNext()){
int userid=cin.nextInt();
Date begintime = sdf.parse(cin.next());
Date endtime = sdf.parse(cin.next());
UserTime ut = new UserTime(userid, begintime, endtime);
usertime.add(ut);
}
//对数据排序
Collections.sort(usertime);
for(int i=0;i<usertime.size();i++){
System.out.println(usertime.get(i).getUserid()+" "+sdf.format(usertime.get(i).getBegintime())+" "+sdf.format(usertime.get(i).getEndtime()));
}
//合并
System.out.println("****************************************");
for(int i=0;i<usertime.size()-1;i++){
int j=i+1;
if(usertime.get(i).getUserid()==usertime.get(j).getUserid())
{
/*
* 分情况讨论
* 1.i的begintime和j的begintime
* 2.i的endtime和j的endtime
* 3.i的endtime和j的endtime
* 本实例就实现第3种情况
*/
if(usertime.get(i).getEndtime().after(usertime.get(i).getBegintime())){
usertime.get(j).setBegintime(usertime.get(i).getBegintime());
usertime.remove(i);
}
}
}
for(int i=0;i<usertime.size();i++){
System.out.println(usertime.get(i).getUserid()+" "+sdf.format(usertime.get(i).getBegintime())+" "+sdf.format(usertime.get(i).getEndtime()));
}
}
}
class UserTime implements Comparable<UserTime>
{
public int userid;
public Date begintime;
public Date endtime;
UserTime(int userid,Date begintime,Date endtime){
this.userid=userid;
this.begintime=begintime;
this.endtime=endtime;
}
@Override
public int compareTo(UserTime o) {
if(this.userid!=o.userid)
return this.userid-o.userid;
else{
if(this.begintime.before(o.begintime))
return -1;
else
return 1;
}
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public Date getBegintime() {
return begintime;
}
public void setBegintime(Date begintime) {
this.begintime = begintime;
}
public Date getEndtime() {
return endtime;
}
public void setEndtime(Date endtime) {
this.endtime = endtime;
}
}