Java中List集合排序的方法 比较器的使用 根据学生对象数序 语文 英语成绩总和进行sort排序

package com.swift;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Test2_ObjectIO {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {

        /*
         * 第2题: 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
         * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
         * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
         */
        List<Student> list = new ArrayList<Student>();
        Scanner scan = new Scanner(System.in);
        for (int i = 1; i <=5; i++) {
            System.out.println("请输入第"+i+"学生信息:格式为 name 60 60 60");
            String name = scan.next();
            Float yuwen = scan.nextFloat();
            Float shuxue = scan.nextFloat();
            Float yingyu = scan.nextFloat();
            Student stu = new Student(name, yuwen, shuxue, yingyu);
            list.add(stu);
        }

        for(Student stu:list) {
            System.out.println(stu.toString());
        }

        Collections.sort(list, new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {
                float num=(o2.getShuxue()+o2.getYingyu()+o2.getYuwen())-(o1.getShuxue()+o1.getYingyu()+o1.getYuwen());
                int i=(int) num;
                return i;
            }
        });

        for(Student stu:list) {
            System.out.println(stu.toString());
        }
    }
}

class Student {
    private String name;
    private float yuwen;
    private float shuxue;
    private float yingyu;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getYuwen() {
        return yuwen;
    }

    public void setYuwen(float yuwen) {
        this.yuwen = yuwen;
    }

    public float getShuxue() {
        return shuxue;
    }

    public void setShuxue(float shuxue) {
        this.shuxue = shuxue;
    }

    public float getYingyu() {
        return yingyu;
    }

    public void setYingyu(float yingyu) {
        this.yingyu = yingyu;
    }

    public Student(String name, float yuwen, float shuxue, float yingyu) {
        super();
        this.name = name;
        this.yuwen = yuwen;
        this.shuxue = shuxue;
        this.yingyu = yingyu;
    }

    public Student() {
        super();
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", yuwen=" + yuwen + ", shuxue=" + shuxue + ", yingyu=" + yingyu + "]";
    }

}

比较器就是个匿名内部类,Collections.sort(list,Comparator<Student>(){});

然后实现其中的compare方法,返回一个int类型的值,正数 负数 0分别代表大于小于等于

增加IO流的内容代码如下;

package com.swift;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Test2_ObjectIO {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {

        /*
         * 第2题: 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,
         * 输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。
         * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。
         */
        List<Student> list = initiateList();

        for(Student stu:list) {
            System.out.println(stu.toString());
        }

        Collections.sort(list, new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {
                float num=(o2.getShuxue()+o2.getYingyu()+o2.getYuwen())-(o1.getShuxue()+o1.getYingyu()+o1.getYuwen());
                int i=(int) num;
                return i;
            }
        });

        initiate_IO(list);

    }

    private static void initiate_IO(List<Student> list) {
        BufferedWriter bw;
        StringBuffer sb=new StringBuffer();
        for(Student stu:list) {
            sb.append(stu.toString());
            sb.append("\r\n");
        }
        try {
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("src\\stu.txt"),"utf-8"));//需要标明路径
            bw.write(sb.toString());
            bw.flush();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } 

    }

    private static List<Student> initiateList() {
        List<Student> list = new ArrayList<Student>();
        Scanner scan = new Scanner(System.in);
        for (int i = 1; i <=5; i++) {
            System.out.println("请输入第"+i+"学生信息:格式为 name 60 60 60");
            String name = scan.next();
            Float yuwen = scan.nextFloat();
            Float shuxue = scan.nextFloat();
            Float yingyu = scan.nextFloat();
            Student stu = new Student(name, yuwen, shuxue, yingyu);
            list.add(stu);
        }
        return list;
    }
}

class Student {
    private String name;
    private float yuwen;
    private float shuxue;
    private float yingyu;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getYuwen() {
        return yuwen;
    }

    public void setYuwen(float yuwen) {
        this.yuwen = yuwen;
    }

    public float getShuxue() {
        return shuxue;
    }

    public void setShuxue(float shuxue) {
        this.shuxue = shuxue;
    }

    public float getYingyu() {
        return yingyu;
    }

    public void setYingyu(float yingyu) {
        this.yingyu = yingyu;
    }

    public Student(String name, float yuwen, float shuxue, float yingyu) {
        super();
        this.name = name;
        this.yuwen = yuwen;
        this.shuxue = shuxue;
        this.yingyu = yingyu;
    }

    public Student() {
        super();
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", yuwen=" + yuwen + ", shuxue=" + shuxue + ", yingyu=" + yingyu + "]";
    }

}

原文地址:https://www.cnblogs.com/qingyundian/p/8280078.html

时间: 2024-10-13 13:37:57

Java中List集合排序的方法 比较器的使用 根据学生对象数序 语文 英语成绩总和进行sort排序的相关文章

Java中list集合的clean()方法滥用引发的bug

做的是电商系统,主系统生成订单后,分别加入到不同的队列中给另外的三个子系统来异步处理,订单和商品是一对多的关系,在实际测试中,发现其中有一个子系统从队列中获取到的订单实体中,商品列表一直为空,子系统的开发人员一直说是获取不到值导致.因为这个问题,测试一直没通过,不得已只能打日志,反复排查.最后发现在这个子系统中,从队列拿到订单实体后,商品列表是不为空的,但是在执行了一个方法后,该订单实体类的商品就为空了.定位到问题后,调试这个方法,后来发现,整个方法的逻辑都是没问题的,只是在方法的最后,对传入的

java中Set集合的遍历方法

S儿童集合的遍历: 第一种:for增强循环 Set<String> set = new HashSet<String>(); for (String str : set) {      System.out.println(str);} 第二种:迭代器遍历 Iterator<String> it = set.iterator();while (it.hasNext()) {  System.out.println(it.next);} 第三种:用的比较少(主要用于泛型的

java中list集合的内容,如何使用像数据库中group by形式那样排序

java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name    money(名称)  (金额) 来源A   100来源B   200来源C   300来源B   6600来源A   99800<数据1> 最后想实现的是:如果假设这些数据在数据库中,那么通过 select name,sum(money) from Table group by name 该语句得到的Li

Java中的集合框架-Map

前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从本篇开始,对集合框架里的另外一部分Map作一下记录. 一,集合框架的Map接口 Map与Collection不同之处在于它是以键值对来存储数据: Map比较常用的实现类有四个:HashTable,HashMap,LinkedHashMap,TreeMap: Map的方法也可以分为四类,增删改查,大致如下: 新

java中的集合操作类(未完待续)

申明: 实习生的肤浅理解,如发现有错误之处,还望大牛们多多指点 废话 其实我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList<XXXXX>(); 但是我仅仅只是了解,list这个类是一个可变长用来存储的对象实例的类,我甚至觉得这个List对象可以理解成数组,但是却又与java中咱们正常理解的数组很多的不同,比如说,他的长度可以随着需要自动增长,比如说,实例化一个List类就和咱们声明数组的时候是不一样的! 今天的实习生活

java中各种集合的用法和比较

一,java中各种集合的关系图 Collection       接口的接口     对象的集合 ├ List             子接口         按进入先后有序保存   可重复 │├ LinkedList    接口实现类     链表     插入删除   没有同步   线程不安全 │├ ArrayList     接口实现类      数组     随机访问   没有同步   线程不安全 │└ Vector        接口实现类       数组              

Java中的集合和常用类

Java中的常用类: ? Object类 ? Math类 ? String类和StringBuffer类(字符串) ? 8种基本类型所对应的包装类 ? java.util包中的类——Date类 Object类: Object类是Java语言程序中所有类的父类,即承自Object类.Object类中包含了Java语言类中的所有的公共属性. ? toString()方法 ? equals()方法 ? getClass()方法 ? clone()方法 ? finalize()方法 枚举类: 用于储存变

Java中Compareable和Comparator两种比较器的区别

Java中Compareable和Comparator两种比较器的区别 1.引言 在java这个处处是对象的世界里,对两个对象进行按某一属性进行比较是特别常见的需求.比如书店中的书按照价格比较,亦或者是学生按照成绩进行排名等等. 对于JDK8而言,有三种实现对象比较的方法: 1.在需要比较的对象类中覆写Object类的equals()方法: 2.需要比较的类继承Comparable接口,然后在其类内部实现compareTo()方法: 3.抛去需要被比较的类,在其外部自定义一个单独的对象比较器,继

将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold", "foreign exchange","fixed income", "futures", "options"}; List<String> assetList = Arrays.asList(asset);