packagecom.dear.uniteMysqlPostgresql;
/**
*公交换乘一站的
*(注意:车次信息、站点信息、公交信息是等价的都是以HashMap的形式存储信息)
*1.从数据库中获得所有公交信息存储到ArrayList,每个具体信息的元数据有三个:
*公交车次、公交站点、该公交站点距离该公交车次的始发站点的站数,具体信息用HashMap保存
*2.然后把公交信息数据进行结构化,把所有公交站点抽出,再把每一个站点对应的所有车次抽出
*与其一一对应,单一的车次信息用HashMap存储,站点对应的所有车次信息用ArrayList存储,
*所有的站点有经过站点的车次信息用HashMap存储
*3.根据查询要求,分别从结构化以后的公交信息数据中找到,经过出发地的所有车次,经过目的地
*的所有车次,然后在分别遍历每个车次,筛选出符合要求的中转站点,筛选规则是:每查询出一个
*站点时,得到该站点距离该站点对应车次的始发站的站数,如果这个站数小于查询站点距离该车次的始
*发站的站数,那么就符合规则,便把该站点信息保存到符合站点的ArrayList中,反之亦然
*4.分别得到查询条件中出发地和目的地的中转站点信息(中转站点信息存储在ArrayList中),然
*后遍历两个中转站点信息的集合,得到所有中转信息(最终中转信息也是用ArrayList存储)
*5.最后处理所有中转信息,即是把中转信息中是相同的两个车次的信息进行合并
*比如有两个换乘方法:109到龙泽换乘200109到上地换乘200
*那么把该数据整理为109到龙泽或者上地换乘200
*
*/
importjava.sql.Statement;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importjava.util.HashMap;
importjava.util.Map;
importjava.util.Set;
publicclassBusTransfer2 {
privateStringstart=null;//出发地
privateStringwhither=null;//目标地
privateListschedule=null;//用于缓存列车时刻表。
privateHashMapstationsOfLine=null;//所有公交线路,每个list存储该线路经过的所有车站。
privateHashMaplinesOfStation=null;//所有车站,每个list中存储通过该车站的所有车次。
// private ArrayList startLine = new ArrayList();//
//途经出发地的所有车次。
// private ArrayList whitherLine = new ArrayList();//
//途经目的地的所有车次。
privateArrayListfirLineStaList=newArrayList();
privateArrayListsecLineStaList=newArrayList();
publicBusTransfer2() {
}
publicBusTransfer2(String start, String whither) {
this.start= start;
this.whither= whither;
try{
this.schedule=this
.executeQuery("select busLine,up,stationNo from bus_stations");
}catch(Exception e) {
//TODOAuto-generated catch block
System.out.println("读取数据库出错");
e.printStackTrace();
}
stationsOfLine=this.getStationsOfLine();
linesOfStation=this.getLinesOfStation();
}
privateArrayList getStations() {
ArrayList arr=newArrayList();
for(inti = 0; i
arr.add((String)((Map)schedule.get(i)).get("up"));
}
returnarr;
}
privateHashMap getStationsOfLine() {
HashMap map =newHashMap();//用于临时存储从schedule中取出的HashMap.
ArrayList line =null;//每个list存储一个车次的相关车站信息。
String buffer ="a";//缓存站名。
String temp =null;//临时存储每次迭代取出的站名,用于与buffer站名比较。
HashMap stationsGroupByLine =newHashMap();//存储以车次分组後的车站的list
Iterator it =schedule.iterator();//迭代器
while(it.hasNext()) {
map = (HashMap) it.next();
temp = (String) map.get("busLine");
if(stationsGroupByLine.containsKey(temp)) {
line = stationsGroupByLine.get(temp);
buffer = (String) ((Map) line.get(0)).get("busLine");
}
if(buffer.equals(temp)) {
line.add(map);//将同一车次的车站放入一个list中
}else{
if(line !=null&& !line.isEmpty()) {
stationsGroupByLine.put(buffer, line);//将由车次分组后的车站构成的list存入一个map