排序在系统中经常用到,一般可以在数据库或者服务器端进行排序。在数据库中,一般使用orderby排序。服务器也使用快速队列。本期采用汇总排序。问题是统计销售数据。每个销售人员都有对应的部门和销售量。现在我们需要统计销售数据。要求部门总销售额按降序排列,同一部门的销售额也按降序排列。例如:销售员部门A的销售,南100wB,南20WC,北30WD,北70WE,北40WF,东150W根据汇总排序:部门销售,东150W,北130W,南120W,再根据排序部门总和,相同部门降序排列:业务员部门SalesFEast150WDNorth70WENorth40WCNorth30WESouth100WFSouth20W{this.salesman=推销员;this.department=部门;这。金额=金额;}@OverridepublicStringtoString(){return"{salesman='"+salesman+'\''+",department='"+department+'\''+",amount="+amount+'}';私人字符串推销员;私人字符串部门;privateIntegeramount;}添加数据//填充数据Listlist=newArrayList<>();SalesmanStatisticstatistic1=newSalesmanStatistic("A","South",100);SalesmanStatisticstatistic2=newSalesmanStatistic("B","南",20);SalesmanStatisticstatistic3=newSalesmanStatistic("C","North",30);SalesmanStatisticstatistic4=newSalesmanStatistic("D","North",70);SalesmanStatisticstatistic5=newSalesmanStatistic("E","North",40);SalesmanStatisticstatistic6=newSalesmanStatistic("F","East",150);list.add(statistic1);list.add(statistic2);list.add(statistic3);列表.add(statistic4);list.add(statistic5);list.add(statistic6);使用两张图,key是入库部门,第一个图的值是总销售额,第二个是同部门的入库清单MapsumMap=newHashMap<>();Map>listMap=newHashMap<>();//将数据放入映射中for(SalesmanStatisticstatistic:list){Stringkey=statistic.getDepartment();整数数量=statistic.getAmount();sumMap.put(key,sumMap.getOrDefault(key,0)+amount);ListsubList=listMap.get(key);if(subList==null){subList=newArrayList<>();}subList.add(统计);listMap.put(key,subList);}首先对总sumMap进行排序,也就是对sumMap的值进行排序://对总和进行排序sumMapList>sumMapList=newArrayList<>(sumMap.entrySet());sumMapList.sort((o1,o2)->o2.getValue().compareTo(o1.getValue()));上面得到的sumMap的list是从大到小排列的,然后遍历每一条数据,根据key匹配listMap的key。先获取listMap的value列表并排序,然后将列表添加到total集合中。Listlist=newArrayList<>();for(Map.Entryentry:sumMapList){Listlist1=listMap.get(entry.getKey());list1.sort((o1,o2)->o2.getAmount().compareTo(o1.getAmount()));list.addAll(list1);}list.stream().forEach(list3->System.out.println(list3.toString()));打印输出结果:{salesman='F',department='East',amount=150}{salesman='D',department='North',amount=70}{salesman='E',department='North',amount=40}{salesman='C',department='North',amount=30}{salesman='A',department='South',amount=100}{salesman='B',department='South',amount=20}Summary按部门汇总排序,然后每个部门也从大到小排序。这里用到了map的键值对属性。流程如下:用sumMap存储部门总数,用listMap存储部门信息。对sumMap的值进行排序,将map.entrySet放入一个集合中进行排序。排序后根据sumMap的key找到listMap的值。先对列表排序,最后放入集合。如果您觉得文章对您有帮助,请点个赞吧!