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 + "]";
} }
Java中List集合排序的方法 比较器的使用 根据学生对象数学 语文 英语成绩总和进行sort排序的更多相关文章
- java 数据类型:集合接口Collection之List~ArrayList:remove移除;replaceAll改变原有值;sort排序;迭代器listIterator();
什么是List集合: 特点: 元素有序可重复的集合. 集合中每个元素都有其对应的顺序索引. List集合默认按元素的添加顺序设置元素的索引,索引从0开始. List接口的常用方法: List可以使 ...
- 关于java中的hashcode和equals方法原理
关于java中的hashcode和equals方法原理 1.介绍 java编程思想和很多资料都会对自定义javabean要求必须重写hashcode和equals方法,但并没有清晰给出为何重写此两个方 ...
- java中list集合的内容,如何使用像数据库中group by形式那样排序
java中list集合的内容,如何使用像数据库中group by形式那样排序,比如:有一个 List<JavaBean> 他中包含了一些如下的内容JavaBean:name mone ...
- 【转载】 C#中List集合使用OrderByDescending方法对集合进行倒序排序
在C#的List集合操作中,有时候需要针对List集合进行排序操作,如果是对List集合按照元素对象或者元素对象的某个属性进行倒序排序的话,可以使用OrderByDescending方法来实现,Ord ...
- Java中的集合概述
Java中的集合类有两个重要的分支,分别是接口Collection(包括List,Set等)和接口Map. 由于HashSet的内部实现原理使用了HashMap,所以我们先来了解Map集合类. 1.H ...
- Java开发知识之Java中的集合Set接口以及子类应用
---恢复内容开始--- Java开发知识之Java中的集合Set接口以及子类应用 一丶Set接口以及作用 在上一讲.我们熟悉了接口的实现图.以及自己各有的子类. List接口主要存储的数据是可以重复 ...
- Java中各种集合(字符串类)的线程安全性!!!
Java中各种集合(字符串类)的线程安全性!!! 一.概念: 线程安全:就是当多线程访问时,采用了加锁的机制:即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读 ...
- Java中的集合框架-Collections和Arrays
上一篇<Java中的集合框架-Map>把集合框架中的键值对容器Map中常用的知识记录了一下,本节记录一下集合框架的两个工具类Collections和Arrays 一,Collections ...
- Java中的集合框架-Map
前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从 ...
随机推荐
- 洛谷 P3372 【模板】线段树 1
P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别 ...
- 洛谷P3293 [SCOI2016]美味(主席树)
传送门 据说这题做法叫做可持久化trie树?(然而我并不会) 首先考虑一下贪心,从高位到低位枚举,如果能选1肯定比选0优 假设已经处理到了$b$的第$i$位,为1(为0的话同理就不说了) 那么只有当$ ...
- js函数-构成
前言 函数是一种封装,在任何语言中都是一个核心概念.在js中,函数是做为对象的子类型存在的.可以拥有自己的属性和方法,可以做为值进行传递,这两个特性让js拥有使用函数式编程的能力. 函数的声明 字面量 ...
- eclipse svn 忽略target .project .classpath等目录文件
这个build失败的解决方案就是不要把你项目的 target目录放在src repository 里面,还有 .project 和 .classpath 最好也别放到src repository 里. ...
- NET API 分析器
NET API 分析器 https://www.hanselman.com/blog/WritingSmarterCrossplatformNETCoreAppsWithTheAPIAnalyzerA ...
- Kestrel服务器启动并处理Http请求
从Hosting开始 知识点: 1.Kestrel服务器启动并处理Http请求的过程. 2.Startup的作用. 源码飘香: 总结: asp.net core将web开发拆分为多个独立的组件,大 ...
- 049 Group Anagrams 字谜分组
给定一个字符串数组,将相同字谜组合在一起.(字谜是指颠倒字母顺序而成的字)例如,给定 ["eat", "tea", "tan", " ...
- Fedora桌面系统Idea中的部分中文无法显示解决
在Linux 桌面开发已经有一段时间了,个人用的是最新的Fedora ,装上idea后,写代码再加中文注释的时候发现部分汉字打不出来,删除的时候发现汉字占着位,只是显示不出来,最初以为是注释问题,调整 ...
- PHP正则表达式 - 附录(常用正则表达式)
常用正则表达式附录I 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: "^\d+$" //非负整数(正整数 + 0) "^[0-9]*[1- ...
- 小G搭积木
A小 G 搭积木文件名 输入文件 输出文件 时间限制 空间限制box.cpp box.in box.out 2s 128MB题目描述小 G 喜欢搭积木.小 G 一共有 n 块积木,并且积木只能竖着一块 ...