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

public List getBillboardData(int pid, Date begin, Date end, int type) {
        //获取行业的股票列表
        SystemPlate plate = DsClientServiceFactory.getDscPlateService().viewSystemPlateByPid(pid);
        List stocks = DsClientServiceFactory.getDscPlateService().viewSystemPlate(plate);
        List symbols = new ArrayList();
        for (SystemPlateStocks stock : stocks) {
            symbols.add(stock.getSymbol());
        }
        //获取资金流数据
        List dateList = new ArrayList();
        Map> map = getMoneyFlowData(symbols, begin, end, type);
        Iterator it = map.keySet().iterator();
        //获得时间段里面的各个时间点
        while (it.hasNext()) {
            String symbol = it.next();
            List 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> tempMap = new HashMap>();
        Iterator it1 = map.keySet().iterator();
        for (Date d : dateList) {
            List tempList = tempMap.get(d);
            while (it1.hasNext()) {
                String symbol = it1.next();
                List 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();
                            System.out.println(d);
                            tempMap.put(d, tempList);
                        }
                        tempList.add(mf);
                    }
                }
            }
        }
        
        List temp = new ArrayList();
        //计算行业龙虎榜数据
        for (Date d : dateList) {
            System.out.println(d);
            List 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。

你可能感兴趣的:(java)