已知:
List<Order> 其数据为
pay_type | 1 | 1 | 2 | 2 |
date | 2017-01-01 | 2017-01-02 | 2017-02-01 | 2017-02-02 |
total_price | 10 | 20 | 30 | 20 |
List<String> dateList 其数据为
date | 2017-01-01~2017-01-07 | 2017-02-01~2017-02-07 |
最后转换成
pay_type | 1 | 2 |
date | 2017-01-01~2017-01-07 | 2017-02-01~2017-02-07 |
total_price | 30 | 50 |
刚开始编写的时候思路很乱,花了一天半的时间,愣是搞不出来。当时百度了Map根据key值去重,map遍历,map根据key合并,String的方法等等,愣是搞了一天没搞出来。之后导师开始把难度降低,但是发现自己之前写的代码原来只需要改动一些,而自己却绕了一个大圈。
1、先不考虑pay_type参数
public static void main(String[] args) { List
2、把pay_type参数考虑进去
刚开始思路也是有点乱,循环出错,原因是我要得到的结果的size为4,而我的循环最后list的size明显不对。在循环,像是多个循环时,先判断好,谁是最外层循环,谁内层循环,为什么这样做。
public static void main(String[] args) { ListorderList = new ArrayList (); Map order = new HashMap(); order.put("pay_type", 1); order.put("date", "2017-01-01"); order.put("price", 10); orderList.add(order); order = new HashMap(); order.put("pay_type", 1); order.put("date", "2017-01-04"); order.put("price", 20); orderList.add(order); order = new HashMap(); order.put("pay_type", 1); order.put("date", "2017-02-04"); order.put("price", 15); orderList.add(order); order = new HashMap(); order.put("pay_type", 2); order.put("date", "2017-01-03"); order.put("price", 17); orderList.add(order); order = new HashMap(); order.put("pay_type", 2); order.put("date", "2017-01-02"); order.put("price", 13); orderList.add(order); order = new HashMap(); order.put("pay_type", 2); order.put("date", "2017-02-02"); order.put("price", 30); orderList.add(order); order = new HashMap(); order.put("pay_type", 2); order.put("date", "2017-02-03"); order.put("price", 30); orderList.add(order); List dateList = new ArrayList (); dateList.add("2017-01-01~2017-01-07"); dateList.add("2017-02-01~2017-02-07"); List tempList = new ArrayList ();//新建list集合 存放pay_type for (Map map : orderList) {//循环订单集合 int payType = Integer.valueOf(map.get("pay_type").toString()); if (!tempList.contains(payType)) { tempList.add(payType);//添加到集合中 } } List resultList = new ArrayList ();//新建集合存放结果 这里list的类型是Map所以要想到新建Map对象 然后往里面put值 for (Integer tempPay : tempList) { for (String timeDate : dateList) {//循环时间集合 Map map = new HashMap(); map.put("pay_type", tempPay); String[] dates = timeDate.split("~");//正则表达式 调用String的split的方法去除~字符 String date1 = dates[0];//获取时间段的起始时间 String date2 = dates[1];//获取时间段的结束时间 map.put("date", timeDate); double totalPrice = 0.0;//定义订单总金额 for (Map map1 : orderList) { if (tempPay.equals(Integer.valueOf(map1.get("pay_type").toString()))) { if (map1.get("date").toString().compareTo(date1) >= 0 && map1.get("date").toString().compareTo(date2) <= 0) {//如果订单的时间大于等于起始时间且小于等于结束时间 时间段put到orders中 totalPrice += Double.valueOf(map1.get("price").toString()); } } } map.put("price", totalPrice); resultList.add(map); } } System.out.println(resultList+"----"+resultList.size());}