weixin_58662786 2023-03-22 18:04 采纳率: 63.6%
浏览 72
已结题

如何在list中给排名参数rank赋值

项目里面碰到了给数据从小到大排序,并且给单位数据排名的需求,目前排序已经好了,但是不知道如何用java把对象list里的参数rank赋值(目前rank都是默认值0),图中左边的就是我目前取出来的数据(里面还有null值),右边的是需要用java加上的rank值,要求同样的值排名rank也相同,求各位看看怎么做比较好

img

  • 写回答

5条回答 默认 最新

  • 「已注销」 2023-03-22 18:34
    关注

    参考GPT:可以使用Java的Collections.sort()方法进行排序,然后遍历排序后的List,为每个对象设置排名参数rank。

    具体来说,可以定义一个实现Comparator接口的类,用来比较List中的对象大小,并在该类中实现compare()方法。然后在排序时将该类的实例作为参数传入Collections.sort()方法中,以进行排序。

    接着,遍历排好序的List,给每个对象设置排名参数rank。对于同样大小的对象,可以在比较大小时定义它们的排名相同,这样就可以保证排名相同的对象具有相同的排名参数rank。

    下面是一个示例代码:

    import java.util.*;
    
    class MyComparator implements Comparator<MyObject> {
        @Override
        public int compare(MyObject o1, MyObject o2) {
            if (o1.getValue() < o2.getValue()) {
                return -1;
            } else if (o1.getValue() > o2.getValue()) {
                return 1;
            } else {
                return 0;
            }
        }
    }
    
    class MyObject {
        private double value;
        private int rank;
    
        public MyObject(double value) {
            this.value = value;
        }
    
        public double getValue() {
            return value;
        }
    
        public void setRank(int rank) {
            this.rank = rank;
        }
    
        public int getRank() {
            return rank;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            List<MyObject> list = new ArrayList<MyObject>();
            list.add(new MyObject(1.0));
            list.add(new MyObject(1.03));
            list.add(new MyObject(1.09));
            list.add(new MyObject(1.14));
            list.add(new MyObject(1.16));
            list.add(new MyObject(1.17));
            list.add(new MyObject(1.18));
            list.add(new MyObject(1.51));
            list.add(new MyObject(1.61));
            list.add(new MyObject(1.64));
            list.add(new MyObject(123));
    
            // 排序
            Collections.sort(list, new MyComparator());
    
            // 遍历排序后的List,为每个对象设置排名参数rank
            int rank = 1;
            for (int i = 0; i < list.size(); i++) {
                MyObject obj = list.get(i);
                if (obj.getValue() == Double.NaN) {
                    // 处理NaN值
                    obj.setRank(0);
                } else if (i > 0 && obj.getValue() == list.get(i-1).getValue()) {
    // 处理与前一个元素相等的情况,排名相同
    obj.setRank(list.get(i-1).getRank());
    } else {
    // 正常情况下,排名递增
    obj.setRank(rank);
    rank++;
    }
    }
    // 打印每个对象的值和排名参数rank
        for (MyObject obj : list) {
            System.out.println("value: " + obj.getValue() + ", rank: " + obj.getRank());
        }
    }
    }
    

    输出结果如下:

    value: 1.0, rank: 1
    value: 1.03, rank: 2
    value: 1.09, rank: 3
    value: 1.14, rank: 4
    value: 1.16, rank: 5
    value: 1.17, rank: 6
    value: 1.18, rank: 7
    value: 1.51, rank: 8
    value: 1.61, rank: 9
    value: 1.64, rank: 10
    value: 123.0, rank: 11
    
    
    

    这段代码中,定义了一个MyComparator类来实现Comparator接口,用于比较MyObject对象的大小。然后,在主函数中,创建了一个List对象,并添加了一些元素。

    接下来,调用Collections.sort()方法对List进行排序,并使用一个变量rank来记录每个元素的排名。在遍历List时,根据元素的值以及与前一个元素的大小关系,分别处理排名参数rank的赋值。最后,输出每个元素的值和排名参数rank。

    该代码可以对任意类型的对象进行排序,并为每个对象设置排名参数rank。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月30日
  • 已采纳回答 3月22日
  • 创建了问题 3月22日

悬赏问题

  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败