//网上map按值排序大多写的有错误
信息学院年终评定奖学金,需要对整个年级的学生按照平均分数进行排名。
要求:根据输入的学号和平均成绩,按照平均成绩降序输出学号,如果平均成绩相同,按照输入的顺序输出。
1.
public static void main(String[] args) {
Map<Integer, Double> map = new LinkedHashMap<Integer, Double>();
Scanner cin = new Scanner(System.in);
int number;
Double score;
while (cin.hasNext()) {
number = cin.nextInt();
score = cin.nextDouble();
if (number == -1)
break;
map.put(number, score);
}
cin.close();
List<java.util.Map.Entry<Integer, Double>> infoIds = new ArrayList<Map.Entry<Integer, Double>>(map.entrySet());
Collections.sort(infoIds, new Comparator<Map.Entry<Integer, Double>>() {
public int compare(Map.Entry<Integer, Double> o1, Map.Entry<Integer, Double> o2) {
return (o2.getValue()).toString().compareTo(o1.getValue().toString());
}
});
for (int i = 0; i < infoIds.size(); i++) {
String id = infoIds.get(i).toString();
System.out.println(id + " ");
}
}
2.
利用list本身按输入顺序排序
package ch13;
public class Student {
private long id;
private double grade;
public Student(long id, double grade) {
this.id = id;
this.grade = grade;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
this.grade = grade;
}
}
package ch13;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Oks {
public static void main(String[] args) {
List<Student> stu = new ArrayList<Student>();
Scanner cin = new Scanner(System.in);
long id;
double grade;
id = cin.nextLong();
grade = cin.nextDouble();
while (id != 0) {
Student s = new Student(id, grade);
stu.add(s);
id = cin.nextLong();
grade = cin.nextDouble();
}
Collections.sort(stu, new Comparator<Student>() {
public int compare(Student s, Student s1) {
if (s.getGrade() < s1.getGrade())
return 1;
if (s.getGrade() == s1.getGrade())
return 0;
return -1;
}
});
System.out.println("排序之后");
for (Student student : stu) {
System.out.println(student.getId() + " " + student.getGrade());
}
}
}