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类按属性排序的主要内容,如果未能解决你的问题,请参考以下文章