项目里面碰到了给数据从小到大排序,并且给单位数据排名的需求,目前排序已经好了,但是不知道如何用java把对象list里的参数rank赋值(目前rank都是默认值0),图中左边的就是我目前取出来的数据(里面还有null值),右边的是需要用java加上的rank值,要求同样的值排名rank也相同,求各位看看怎么做比较好
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。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 CARSIM前车变道设置
- ¥50 三种调度算法报错 有实例
- ¥15 关于#python#的问题,请各位专家解答!
- ¥200 询问:python实现大地主题正反算的程序设计,有偿
- ¥15 smptlib使用465端口发送邮件失败
- ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
- ¥15 对于squad数据集的基于bert模型的微调
- ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
- ¥20 steam下载游戏占用内存
- ¥15 CST保存项目时失败