对象-JAVA 菜鸟 问一个菜鸟问题 list 的排序问题

问题描述

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

对象-JAVA 菜鸟 问一个菜鸟问题 list 的排序问题的相关文章

菜鸟问一个hibernate关于继承关系映射的配置问题

问题描述 菜鸟问一个hibernate关于继承关系映射的配置问题 按照教学视频配置: <class name="Employee" discriminator-value = "0"> <id name="id"> <generator class="native"></generator> </id> <property name="name&quo

java jquer...-问一个jquery动态赋值的问题,求大神解决

问题描述 问一个jquery动态赋值的问题,求大神解决 我有一个页面里面有一个单选框,单选框选了后传到后台没有值,还有就是如何实现点击单选框的时候用jquery动态的给后面的两个文本框赋值,点击单选框如果为true时,给后面两个文本框赋值,求大神解决,java 解决方案 <script type="text/javascript"> function cbChange(){ if($("#rad").is(":checked")){

对象-java自己写一个按钮类问题

问题描述 java自己写一个按钮类问题 在一个java程序中,按钮有设置边框,透明,加图片,设置字体,设置背景颜色等行为,有多个按钮,如何写个按钮方法把这些行为写进去,调用的时候只要创建一个按钮对象就能将这么多行为包含进去 解决方案 直接用Java的awt库函数啊,用不着自己写,只要了解Java的按钮JButton,绑定事件处理函数. 解决方案二: 我觉得界面复制就好 不需要那么麻烦吧 解决方案三: 你可以写一个类继承java自己的JButton按钮,然后你把你想要的效果设为类的属性,你创建一个

问一个菜鸟问题~急~

问题描述 在写asp.net的注册页面,正写到添加数据的按钮,准备编写一个添加类,通过传参数(数据表名,数据项,文本框),实现往数据库表里添加文本框内输入的内容的功能,不过我是刚学,身边又没有老师,有点昏..所以请教下大家该怎么写?能不能给我个代码示范(语言用c#,sql的数据库,写的时候数据表名,数据项,文本框名这些自定义的东西用中文表示,这样我才看的懂..没办法,实在是太菜..) 解决方案 解决方案二:下载petshop学习一下解决方案三:petshop是什么?刚下载下来了,不会用....

菜鸟问一个很菜的问题……

问题描述 代码:dyInclude.jsp<%@pagelanguage="java"contentType="text/html;charset=gb2312""%><%StringFileName;FileName="beInclude.jsp";%><jsp:includepage="<%=FileName%>"/>beInclude.jsp<%@pagel

问一个菜鸟问题:C++.NET与VC++有什么区别?

问题描述 学习C++.NET需要学习MFC吗? 解决方案 解决方案二:C++.NET与VC++有什么区别?C++.NET是托管C++,运行的时候需要得到CLR(.net运行环境)的支持.VC++是非托管C++,无需得到CLR(.net运行环境)的支持就能运行.解决方案三:补充下:C++.NET与VC++有什么区别?前者比后者多了托管代码,也就是C++.NET里也可以建立非托管项目,无需CLR的支持.解决方案四:C++.NET建立在.NET平台下解决方案五:.net框架下c++的执行效率到底怎么样

java web-提问一个JAVA初级问题~关于Hibernate的Fetch~~~谢谢~~

问题描述 提问一个JAVA初级问题~关于Hibernate的Fetch~~~谢谢~~ from Student s join s.teacher 和 from Student s join fetch s.teacher 加不加fetch有区别吗? 在实体类默认的是FetchType.eager,那么两者应该都是 迫切左连接,都能取出关联类啊,感觉只是返回的结果集不一样,一个是返回一个对象,一个返回的是两个对象.

服务器-问一个关于putty的问题

问题描述 问一个关于putty的问题 菜鸟问一个小问题,putty远程登录服务器之后如何把服务器上的文件下载到本地,以及如何把本地文件传到服务器上 解决方案 如果你的本机是windows的,可以使用工具:WinSCP 解决方案二: 只要知道本地的IP地址就可以使用scp命令拷贝,如:scp -r 文件夹名 用户名@服务器IP:/目的路径 然后输入用户名密码就可以实现copy 解决方案三: 只要知道本地的IP地址就可以使用scp命令拷贝,如:scp -r 文件夹名 用户名@服务器IP:/目的路径

java 编程-关于java对象调用的一个菜鸟级问题

问题描述 关于java对象调用的一个菜鸟级问题 本人新手,币也不够,帮帮忙吧大家.学java不久,遇到这么一个问题:怎么在一个类中调用另一个类的对象获取该对象数据呢?(两个类不在同一个包里)如包a中有class A{} 和两个对象A a1=new A():A a2=new A();包b中有class B{}.我要在b包中访问a1和a2应该怎么访问呀?要求b包不再生成新的A类对象,且A类不能是单例. 解决方案 a中添加class Global{ static public A a1; static