Java类按属性排序

Posted 持.之.以.恒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java类按属性排序相关的知识,希望对你有一定的参考价值。

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;
	

 

 

以上是关于Java类按属性排序的主要内容,如果未能解决你的问题,请参考以下文章

list 怎么自定义排序

如何使用自定义模型类按部分按字母顺序对 tableView 中的数据进行排序?

java中怎样对一个整数数组进行降序排序

若依框架实现表格按照属性排序 升序或降序

Java数组降序排序?

降序排序:Java Map