1.首先假造一点数据 创建一个person类(getset构造方法自己补充)
public class Person {
private String name ;
private Integer jiedanshu;
private Integer nianling;
}
2.接下来new出几个对象来加进集合中
ArrayList<Person> personList = new ArrayList<>();
Person person = new Person("张三",5);//创建了只有名字和接单数的构造方法
Person person1 = new Person("李四",3);
Person person2 = new Person("王五",3);
Person person3 = new Person("赵六",9);
Person person4 = new Person("老七",7);
Person person5 = new Person("小八",1);
Person person6 = new Person("大哥",0);
personList.add(person);
personList.add(person1);
personList.add(person2);
personList.add(person3);
personList.add(person4);
personList.add(person5);
personList.add(person6);
personList.forEach(i-> System.out.println("没有排序之前的顺序"+i));
3.接下来将集合按照接单数进行一个排序(此时的排序是有重复数据的)
personList.sort(new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
if(o1.getJiedanshu()>o2.getJiedanshu()){
return 1;
}else if(o1.getJiedanshu()<o2.getJiedanshu()){
return -1;
}else{
return 0;
}
}
});
personList.forEach(i-> System.out.println("排序之后的顺序"+i));
4.将排好序后的集合添加进linkedhashmap中进行去重(String放入接单数,integer放入排名顺序)
LinkedHashMap<String, Integer> map = new LinkedHashMap<>(personList.size()); //创建一个集合将personsize的大小放进去
5.循环list集合将接单数以key,排名以value方式放入进去
//刚开始的时候将所有的接单数当key放入进去,value全部为0,因为此时的放入num的话进行不了++操作,这个我底层也不是很清楚。
personList.forEach(t->{
map.put(t.getJiedanshu().toString(),0);
});
//将key全部添加进去之后再循环map集合 定义一个num数字每次都++ 到此排名就做出来了
int num=0;
for(String s :map.keySet()){
map.put(s,++num);
}
6.循环list集合 如果接单数和map中的key相同的话就将value赋予list的排名
personList.forEach(i->{
map.forEach((k,v)->{
if(i.getJiedanshu().toString().equals(k)){
i.setnianling(v);
}
});
});
personList.forEach(i-> System.out.println("最终排好序之后的集合"+i));