1.需求场景
读取指定格式字符数据,将数据 按照指定字段分类,并对分类和分类数据按照指定字段排序
2.项目环境
普通java web 项目
3.实现方法
(1) 集合数据实体类
public class Food { private String type;//分类名称 private String name;//食品名称 private String rate;//占比值(数字) getter/setter略..... } public class FoodGroup { private String type;//食品分类 private String List<Food> list;//食品集合 private String totalrate;//该分类总的占比值(数字) getter/setter略..... }
(2)指定字段分类
//食品分类名称 分组 public List<FoodGroup> groupType() { List<Food> list =FileUtil.getFoodList();//从文件获取食品信息 Map<String, List<Food>> resultMap = new HashMap<String, List<Food>>(); for (Food f : list) { // map中key已存在,将该数据存放到同一个key的map中 if (resultMap.containsKey(f.getType())) { resultMap.get(f.getType()).add(f); } else { // map中不存在,新建key,用来存放数据 List<Food> tmpList = new ArrayList<Food>(); tmpList.add(f); resultMap.put(tag.getType(), descByRate(tmpList)); } } return handerMap(resultMap); }
(3)分类排序与分类数据排序
//食品按权重排序 public List<Food> descByRate(List<Food> list){ Collections.sort(list, new Comparator<Food>(){ public int compare(Food o1, Food o2) { double v1=Double.valueOf(o1.getRate()); double v2=Double.valueOf(o2.getRate()); //按照权重进行降序排列 if( v1<v2 ){ return 1; } if(v1==v2){ return 0; } return -1; } }); return list; } //累计食品分类权值 public String countRate(List<Food> list){ double rate = 0; for (int i = 0; i < list.size(); i++) { rate+=Double.valueOf(list.get(i).getRate()); } return String.format("%.2f", rate).toString(); } //重新构建对象 public List<FoodGroup> buildFoodGroup(Map<String, List<Food>> map){ List<FoodGroup> fglist = new ArrayList<FoodGroup>(); for (String key : map.keySet()) { List<Food> list = map.get(key); String totalRate = countRate(list); FoodGroup fg = new FoodGroup(); fg.setTotalRate(totalRate); fg.setFood(list); fg.setType(key); fglist.add(fg); } return descByTotalRate(fglist); } //按食品分类汇总权值排序 public List<FoodGroup> descByTotalRate(List<FoodGroup> list){ Collections.sort(list, new Comparator<FoodGroup>(){ public int compare(FoodGroup o1, FoodGroup o2) { double v1=Double.valueOf(o1.getTotalRate()); double v2=Double.valueOf(o2.getTotalRate()); //按照权重进行降序排列 if( v1<v2 ){ return 1; } if(v1==v2){ return 0; } return -1; } }); return list; }