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开发常用知识点作了一下记录,从 ...
随机推荐
- Linux命令 查看Linux版本和是否联网
1.查看Linux内核版本 1.1 $ cat /proc/version [heima01@heima01 ~]$ cat /proc/version Linux version 2.6.32-57 ...
- PAT甲级——1106 Lowest Price in Supply Chain(BFS)
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90444872 1106 Lowest Price in Supp ...
- MySQL数据库(3)
外键的变种(三种关系),数据的增删改,单表查询,多表查询 一.外键的变种(三种关系) 本节重点: 如何找出两张表之间的关系 表的三种关系 一.介绍 因为有foreign key的约束,使得两张表形成了 ...
- NET Core 2.0使用Cookie认证实现SSO单点登录
NET Core 2.0使用Cookie认证实现SSO单点登录 之前写了一个使用ASP.NET MVC实现SSO登录的Demo,https://github.com/bidianqing/SSO.Sa ...
- HTML——制作一个简易菜单栏
识点写在注释中 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Python 踩坑之旅进程篇其三pgid是个什么鬼 (子进程\子孙进程无法kill 退出的解法)
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4.1 技术关键字 下期坑位预告 代码示例支持 平台: Centos 6.3 Python: 2.7.14 Github: https: ...
- webpack.config.js====entry入口文件的配置
1. 一般是采用对象语法: entry: { index: './src/default/js/index.js' }, https://webpack.css88.com/concepts/ent ...
- Netty之WebSocket和四种IO介绍
Netty简介 一.什么是netty? 高性能 事件驱动 异步非堵塞 基于NIO的客户端,服务器端编程框架 稳定性和伸缩性 二.Netty的使用场景 高性能领域 多线程并发领域 异步通信领域 ...
- JVM类加载之创建对象的过程
JVM对象的创建 new一个对象到底发生了什么? 1.VM遇到new关键字:首先检查是否能在常量池中定位到一个类的符号引用,并检查这个符号引用代表的类是否被加载,验证,准备,解析,初始化过,如果没有, ...
- POJ3252Round Numbers(数位dp)
题意 给出区间$[A, B]$,求出区间内的数转成二进制后$0$比$1$多的数的个数 $1 \leqslant A, B \leqslant 2,000,000,000$ Sol 比较zz的数位dp ...