public List<MoneyFlowData> getBillboardData(int pid, Date begin, Date end, int type) {
//获取行业的股票列表
SystemPlate plate = DsClientServiceFactory.getDscPlateService().viewSystemPlateByPid(pid);
List<SystemPlateStocks> stocks = DsClientServiceFactory.getDscPlateService().viewSystemPlate(plate);
List<String> symbols = new ArrayList<String>();
for (SystemPlateStocks stock : stocks) {
symbols.add(stock.getSymbol());
}
//获取资金流数据
List<Date> dateList = new ArrayList<Date>();
Map<String, List<MoneyFlowData>> map = getMoneyFlowData(symbols, begin, end, type);
Iterator<String> it = map.keySet().iterator();
//获得时间段里面的各个时间点
while (it.hasNext()) {
String symbol = it.next();
List<MoneyFlowData> list = map.get(symbol);
for (int i = 0; i < list.size(); i++) {
Date date = list.get(i).getDate();
if (dateList.indexOf(date) == -1) {
dateList.add(date);
}
}
}
//以时间点为key将资金流数据保存到一个map中
Map<Date, List<MoneyFlowData>> tempMap = new HashMap<Date, List<MoneyFlowData>>();
Iterator<String> it1 = map.keySet().iterator();
for (Date d : dateList) {
List<MoneyFlowData> tempList = tempMap.get(d);
while (it1.hasNext()) {
String symbol = it1.next();
List<MoneyFlowData> list = map.get(symbol);
for (int i = 0; i < list.size(); i++) {
MoneyFlowData mf = list.get(i);
Date date = mf.getDate();
if (d.getTime() == date.getTime()) {
System.out.println("============++++++++===");
if (tempList.isEmpty()) {
tempList = new ArrayList<MoneyFlowData>();
System.out.println(d);
tempMap.put(d, tempList);
}
tempList.add(mf);
}
}
}
}
List<MoneyFlowData> temp = new ArrayList<MoneyFlowData>();
//计算行业龙虎榜数据
for (Date d : dateList) {
System.out.println(d);
List<MoneyFlowData> list = tempMap.get(d);
double extraLargeNet = 0.0;
double largeNet = 0.0;
double smallNet = 0.0;
double retailNet = 0.0;
double netAmount = 0.0;
int attention = 0;
int rate = 0;
//除了评级数据求平均之外,其他求和
for (MoneyFlowData mfd : list) {
extraLargeNet += mfd.getExtraLargeNet();
largeNet += mfd.getLargeNet();
smallNet += mfd.getSmallNet();
retailNet += mfd.getRetailNet();
netAmount += mfd.getNetAmount();
attention += mfd.getAttention();
rate += mfd.getNewestRate();
}
MoneyFlowData mfd = new MoneyFlowData();
mfd.setPid(pid);
mfd.setExtraLargeNet(extraLargeNet);
mfd.setLargeNet(largeNet);
mfd.setSmallNet(smallNet);
mfd.setRetailNet(retailNet);
mfd.setNetAmount(netAmount);
mfd.setAttention(attention);
// if(!list.isEmpty()){
mfd.setNewestRate(rate / list.size());//计算rate要四舍五入
// }
temp.add(mfd);
}
return temp;
//获取行业的股票列表
SystemPlate plate = DsClientServiceFactory.getDscPlateService().viewSystemPlateByPid(pid);
List<SystemPlateStocks> stocks = DsClientServiceFactory.getDscPlateService().viewSystemPlate(plate);
List<String> symbols = new ArrayList<String>();
for (SystemPlateStocks stock : stocks) {
symbols.add(stock.getSymbol());
}
//获取资金流数据
List<Date> dateList = new ArrayList<Date>();
Map<String, List<MoneyFlowData>> map = getMoneyFlowData(symbols, begin, end, type);
Iterator<String> it = map.keySet().iterator();
//获得时间段里面的各个时间点
while (it.hasNext()) {
String symbol = it.next();
List<MoneyFlowData> list = map.get(symbol);
for (int i = 0; i < list.size(); i++) {
Date date = list.get(i).getDate();
if (dateList.indexOf(date) == -1) {
dateList.add(date);
}
}
}
//以时间点为key将资金流数据保存到一个map中
Map<Date, List<MoneyFlowData>> tempMap = new HashMap<Date, List<MoneyFlowData>>();
Iterator<String> it1 = map.keySet().iterator();
for (Date d : dateList) {
List<MoneyFlowData> tempList = tempMap.get(d);
while (it1.hasNext()) {
String symbol = it1.next();
List<MoneyFlowData> list = map.get(symbol);
for (int i = 0; i < list.size(); i++) {
MoneyFlowData mf = list.get(i);
Date date = mf.getDate();
if (d.getTime() == date.getTime()) {
System.out.println("============++++++++===");
if (tempList.isEmpty()) {
tempList = new ArrayList<MoneyFlowData>();
System.out.println(d);
tempMap.put(d, tempList);
}
tempList.add(mf);
}
}
}
}
List<MoneyFlowData> temp = new ArrayList<MoneyFlowData>();
//计算行业龙虎榜数据
for (Date d : dateList) {
System.out.println(d);
List<MoneyFlowData> list = tempMap.get(d);
double extraLargeNet = 0.0;
double largeNet = 0.0;
double smallNet = 0.0;
double retailNet = 0.0;
double netAmount = 0.0;
int attention = 0;
int rate = 0;
//除了评级数据求平均之外,其他求和
for (MoneyFlowData mfd : list) {
extraLargeNet += mfd.getExtraLargeNet();
largeNet += mfd.getLargeNet();
smallNet += mfd.getSmallNet();
retailNet += mfd.getRetailNet();
netAmount += mfd.getNetAmount();
attention += mfd.getAttention();
rate += mfd.getNewestRate();
}
MoneyFlowData mfd = new MoneyFlowData();
mfd.setPid(pid);
mfd.setExtraLargeNet(extraLargeNet);
mfd.setLargeNet(largeNet);
mfd.setSmallNet(smallNet);
mfd.setRetailNet(retailNet);
mfd.setNetAmount(netAmount);
mfd.setAttention(attention);
// if(!list.isEmpty()){
mfd.setNewestRate(rate / list.size());//计算rate要四舍五入
// }
temp.add(mfd);
}
return temp;
}关于map.getKey()遍历date的时候,因为datelist里面的d根本就不是templist里面的key,所以List tempList = tempMap.get(d);是取不出来结果的,就算是null也取不出来结果for (Date d : dateList) { List tempList = tempMap.get(d);
但是后来发现,这样的的解析也是错误的,正确的理解应该是这里的tempList 是null的没有什么.size 这样诸如此类的操作,如果list是null的话,这些操作都是错误的。
对于map的排序,有两种方法,一个是定义一个比较器,这个更list里面的排序的原理是一样的,只是比较的是key而已
另一种方法是直接使用treeMap,因为TreeMap在put进去的时候应该是排序的。TreeMap就是排序了的map。