关于map.getKey()的一些所得(计算行业的资金流入)

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;

    }关于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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值