问题描述
- JAVA 菜鸟 问一个菜鸟问题 list 的排序问题
-
简化一下 list 情况
比如 一个 student 类
只有两个参数 学号 sno 和 成绩 grade
现全放入 ArrayList中
如何按成绩 将 学生对象排序
实现目标如下即可
002 97
003 95
001 90
求各位路过大神 不吝指教后生
解决方案
先自己定义一个对比的方法类
class MyIntComparator implements Comparator{
public int compare(Object o1, Object o2) {
int i1 = ((Student )o1).getScore();
int i2 = ((Student )o2).getScore();
if (i1 < i2){
return 1;
}
if (i1 > i2){
return -1;
}
return 0;
}
}
调用:
//下面将list的元素按降序排列
list.add(s1);
list.add(s2);
Collections.sort(list, new MyIntComparator());
解决方案二:
最少代码实现, 其实跟上面一个道理
Collections.sort(studentList, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o1.getGrade().compareTo(o2.getGrade());
}
});
解决方案三:
建议直接学习google的guava包了,里面提供了强大的流畅风格比较器。
下面是个例子。更多你可以看http://ifeve.com/google-guava-ordering/
import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import java.util.List;
/**
* Created by leeyee.li on 2015/9/20.
*/
public class OrderTest {
public static final Ordering<Student> ORDER_BY_GRADE = Ordering.natural().onResultOf(new Function<Student, Comparable>() {
@Override
public Comparable apply(Student input) {
return input.grade;
}
});
public static void main(String[] args) {
List<Student> students = Lists.newArrayList(
new Student("001", 90),
new Student("002", 97),
new Student("003", 95)
);
System.out.println("排序前:" + students);
System.out.println("顺序排序后:" + ORDER_BY_GRADE.sortedCopy(students));
System.out.println("倒序排序后:" + ORDER_BY_GRADE.reverse().sortedCopy(students));
System.out.println("最小对象:" + ORDER_BY_GRADE.min(students));
System.out.println("最大对象:" + ORDER_BY_GRADE.max(students));
}
}
class Student {
String sno;
Integer grade;
public Student() {
}
public Student(String sno, Integer grade) {
this.sno = sno;
this.grade = grade;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public Integer getGrade() {
return grade;
}
public void setGrade(Integer grade) {
this.grade = grade;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("Student{");
sb.append("sno='").append(sno).append(''');
sb.append(", grade=").append(grade);
sb.append('}');
return sb.toString();
}
}
解决方案四:
java菜鸟问题贴
兔子问题,java菜鸟编程
ACE菜鸟的问题
解决方案五:
冒泡等基本排序算法可以解决这个问题
解决方案六:
这个问题还是使用基本的方法吧,学习下Comparator接口的相关知识,或者直接使用林炳文的代码。
解决方案七:
我记得有个.sort方法可以,不过建议你使用算法完成
解决方案八:
取出来的时候对分数进行排序后放入list,在循环获取就行
解决方案九:
推荐yongxu_16方法,尽量使用JDK提供的方法,测试量小,不容易出错,性能上也不会太差。
如果没有特殊性能要求,你的数据也没有太大特性,那么为什么不用官方提过的方法呢。
时间: 2024-09-14 20:37:25