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 + "]";
} }

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

  1. java 数据类型:集合接口Collection之List~ArrayList:remove移除;replaceAll改变原有值;sort排序;迭代器listIterator();

    什么是List集合: 特点: 元素有序可重复的集合. 集合中每个元素都有其对应的顺序索引. List集合默认按元素的添加顺序设置元素的索引,索引从0开始.   List接口的常用方法: List可以使 ...

  2. 关于java中的hashcode和equals方法原理

    关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...

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

    java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name    mone ...

  4. 【转载】 C#中List集合使用OrderByDescending方法对集合进行倒序排序

    在C#的List集合操作中,有时候需要针对List集合进行排序操作,如果是对List集合按照元素对象或者元素对象的某个属性进行倒序排序的话,可以使用OrderByDescending方法来实现,Ord ...

  5. Java中的集合概述

    Java中的集合类有两个重要的分支,分别是接口Collection(包括List,Set等)和接口Map. 由于HashSet的内部实现原理使用了HashMap,所以我们先来了解Map集合类. 1.H ...

  6. Java开发知识之Java中的集合Set接口以及子类应用

    ---恢复内容开始--- Java开发知识之Java中的集合Set接口以及子类应用 一丶Set接口以及作用 在上一讲.我们熟悉了接口的实现图.以及自己各有的子类. List接口主要存储的数据是可以重复 ...

  7. Java中各种集合(字符串类)的线程安全性!!!

    Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...

  8. Java中的集合框架-Collections和Arrays

    上一篇<Java中的集合框架-Map>把集合框架中的键值对容器Map中常用的知识记录了一下,本节记录一下集合框架的两个工具类Collections和Arrays 一,Collections ...

  9. Java中的集合框架-Map

    前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从 ...

随机推荐

  1. css中vw和vh的知识点

    引用文档:http://caibaojian.com/vw-vh.html: http://www.zhangxinxu.com/wordpress/2012/09/new-viewport-rela ...

  2. java使用Robot类在eclipse上实现自动编写代码

    运行时,把输入法关掉,切换成系统自带的输入法即可: 第二个类是自定义的键值Map集合,主要是为了方便输入字符串,有需要的可以自行添加: 主要的代码如下,会创建一个名称为Automaton.java的类 ...

  3. 剑指Offer的学习笔记(C#篇)-- 包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 一 . 题目该怎么想 1 . 定义栈的数据结构:实现Push.Pop.Top.Min方 ...

  4. 剑指Offer的学习笔记(C#篇)-- 用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 一 . 概念! 首先要理解栈和队列的概念. 1. 栈:咱可以简单的把栈理解成装羽毛球的球桶.或者我们吃的 ...

  5. STP-7-RSTP的BPDU格式和处理方式的改变

    RSTP只使用一种BPDU,协议版本字段为2(STP为0). STP标志字段8位只使用了两位:TC(拓扑变化)和TCA(拓扑变化确认). RSTP也使用了其余6位:提议位,端口角色位,学习位,转发位, ...

  6. F-三生三世

    链接:https://ac.nowcoder.com/acm/contest/892/F 题意: 秦皇岛的海风轻轻地唱着歌唤醒了水上的涟漪,冬日的阳光把沙滩洒满了金黄. BD哥在沙滩上留下了一串串脚印 ...

  7. vue-cli搭建项目及代理路由设置

    vue-cli 是vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli 一. 安装 node ...

  8. Try .NET离线版

    https://github.com/dotnet/try Try .NET离线版 使用Try.NET创建可交互.NET文档   原文地址:Create Interactive .NET Docume ...

  9. 072 Edit Distance 编辑距离

    给出两个单词 word1 和 word2,找出将 word1 转换成 word2 所使用的最少的步骤数 (每个操作记为一步).你可以对一个单词进行以下三种操作:a) 插入一个字符b) 删除一个字符c) ...

  10. 一文读懂DDD

    何为DDD DDD不是架构设计方法,不能把每个设计细节具象化,DDD是一套体系,决定了其开放性,体系中可以用任何一种方法来解决这些问题,但是如果一些关键问题没有具体方案落地,可能让团队无所适从. 有的 ...