使用Collections.sort()实现按指定字段排序

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;
	}


猜你喜欢

转载自blog.csdn.net/u011625492/article/details/80350734