对数据进行比较分出排名,排名会有相同的情况。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值