两个list
1 用户list(size未知)
id name
001 张三
002 李四
003 王五
2 投标金额list (size未知)
用户id 积分
001 100
001 80
002 90
003 60
002 30
需要结果,根据用户投标金额从小到大进行排名,(李四报价最低30,所以为第一,王五的最低价为60,所以是第二,以此类推)
李四 排名 1
王五 排名 2
张三 排名 3
```Map<String,Object> map = new HashMap<>();
map.put("001","张三");
map.put("002","李四");
map.put("003","王五");
List<MyMoney> moneyList = new ArrayList<MyMoney>();
MyMoney money1 = new MyMoney();
money1.setCode("001");money1.setMoney(100);
moneyList.add(money1);
MyMoney money2 = new MyMoney();
money2.setCode("001");money2.setMoney(80);
moneyList.add(money2);
MyMoney money3 = new MyMoney();
money3.setCode("002");money3.setMoney(90);
moneyList.add(money3);
MyMoney money4 = new MyMoney();
money4.setCode("003");money4.setMoney(60);
moneyList.add(money4);
MyMoney money5 = new MyMoney();
money5.setCode("002");money5.setMoney(30);
moneyList.add(money5);
Collections.sort(moneyList, new Comparator<MyMoney>() {
@Override
public int compare(MyMoney o1, MyMoney o2) {
int m1 = o1.getMoney();
int m2 = o2.getMoney();
if (m1 > m2) {
return 1;
} else if (m1 == m2) {
return 0;
} else {
return -1;
}
}
});
for(int i=0;i<moneyList.size();i++)
{
MyMoney news=(MyMoney)moneyList.get(i);
System.out.println("code:"+map.get(news.getCode())+" money:"+news.getMoney()+" 排名"+(i+1)+"\r\n");
}
下面是MyMoney对象类
public class MyMoney {
private String code;
private Integer money;
public MyMoney(){}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Integer getMoney() {
return money;
}
public void setMoney(Integer money) {
this.money = money;
}
}
代码可以直接拿来用,我已测过,望采纳
这是执行结果:
code:李四 money:30 排名1
code:王五 money:60 排名2
code:张三 money:80 排名3
code:李四 money:90 排名4
code:张三 money:100 排名5
size未知不要紧,只要用 list.length 就可以得到大小
但是你排序的规则是什么,你有两个001两个002,是所有的积分求和还是取最大的那个?
无论哪种,都可以借助一个 HashMap将人名和分数连起来,然后用 sort 排序
说清楚可以帮你写一个。
private void sort( List<Double> valueList,List<String> nameList) {
List<Double> xValue = new ArrayList<>();
List<String> xName = new ArrayList<>();
int de;
int i = 0;
Iterator<Double> it = valueList.iterator();
while(it.hasNext()){
de = 0;
for(int j = 0; j < valueList.size(); j ++) {
if(valueList.get(de) < valueList.get(j)) {
de = j;
}
}
xValue.add(i,valueList.get(de));
valueList.remove(de);
xName.add(i,nameList.get(de));
nameList.remove(de);
i++;
}
valueList = xValue;
nameList = xName;
}
public static void main(String []fsdsf) {
List<Double> yValue = new ArrayList<>();
List<String> yName = new ArrayList<>();
yValue.add(9.0);
yName.add("aa");
yValue.add(12.0);
yName.add("bb");
yValue.add(3.0);
yName.add("cc");
yValue.add(7.0);
yName.add("dd");
List<Double> xValue = new ArrayList<>();
List<String> xName = new ArrayList<>();
int de;
int i = 0;
Iterator<Double> it = yValue.iterator();
while(it.hasNext()){
de = 0;
for(int j = 0; j < yValue.size(); j ++) {
if(yValue.get(de) < yValue.get(j)) {
de = j;
}
}
xValue.add(i,yValue.get(de));
yValue.remove(de);
xName.add(i,yName.get(de));
yName.remove(de);
i++;
}
for (Double d : xValue ) {
System.out.println(d);
}
for (String d : xName ) {
System.out.println(d);
}
}
https://blog.csdn.net/qq_38974073/article/details/88757725
java对两个有对应关系的list进行排序
实现思路:先对积分进行排序,排好序就基本差不多了,再把名字塞进去就行了
public static void main(String[] args) {
//数据
ArrayList<User> listUser = new ArrayList<>();
for (int i = 0; i < 5; i++) {
User u = new User();
u.id = i;
u.name = "张三" + i;
listUser.add(u);
}
System.out.println(JSON.toJSONString(listUser));
ArrayList<Integral> listIntegral = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 10; i++) {
Integral in = new Integral();
in.id = i % 5;
in.integral = random.nextInt(100);
listIntegral.add(in);
}
System.out.println(JSON.toJSONString(listIntegral));
//先对积分排序
Collections.sort(listIntegral);
//将user根据id存成map,减少时间复杂度
HashMap<Long, String> mapUser = new HashMap<>();
for (User user : listUser) {
mapUser.put(user.id, user.name);
}
ArrayList<Result> listResult = new ArrayList<>();
//按顺序遍历就是了
for (Integral in : listIntegral) {
Result r = new Result();
r.id = in.id;
r.integral = in.integral;
r.name = mapUser.get(in.id);
listResult.add(r);
}
//最终结果
System.out.println(JSON.toJSONString(listResult));
}
static class User {
public long id;
public String name;
}
static class Integral implements Comparable<Integral> {
public long id;
public long integral;
@Override
public int compareTo(Integral in) {//排序
return integral - in.integral > 0 ? 1 : -1;
}
}
static class Result extends User {
public long integral;
}
问答版主就是牛,从现在起只回论坛,不在踏入问答半步