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开发常用知识点作了一下记录,从 ...
随机推荐
- jzoj6001. 【PKUWC2019模拟2019.1.15】Mines (tarjan)
题面 题解 我们把每个地雷向它能炸到的地雷连边,不难发现同一个强联通分量里的点只要一个炸全炸 那么我们缩点,首先所有入度为\(0\)的强联通分量中必须得选一个地雷炸掉,而入度不为\(0\)的强联通分量 ...
- ajax异步传输数据,return返回值为空
今天在项目中遇到了一个问题,就是在定义了一个函数drawHtml(),本意是想在函数运行结束后,返回拼接的字符串,可是函数运行结束后始终返回的是undefined 有BIG的代码: function ...
- Python简易购物车程序
2019年5月24日,是我离开北京回学校的日子.我退了组的房子,辞了工作,带着对小秋香不舍回家,这匆匆一别,不知何时才是归期. 这几天都疏于学习,因为每一天我都会和她找点有意思的事情来做,如果这一别就 ...
- SSH 的端口转发
第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我 ...
- 《四 spring源码》手写springmvc
手写SpringMVC思路 1.web.xml加载 为了读取web.xml中的配置,我们用到ServletConfig这个类,它代表当前Servlet在web.xml中的配置信息.通过web.xml ...
- arcgis python 保存当前窗口图形为jpg
1,第一步打开arcgis 将图形加载进去 第二步,将要保存的图形调到合适的比例尺,然后点击下面按钮 第三步,将写好的python 语句放到里面去: import arcpy mxd = arcpy. ...
- js页面可视区域懒加载
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HTTP1.1中CHUNKED编码解析(转载)
HTTP1.1中CHUNKED编码解析 一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RF ...
- JAVA基础之项目分包
个人理解: 项目分层分包适合多人开发合作的,最好一个界面设置一个view,同时注释一定设置好,按照顺序:从前向后进行传递参数,从后向前进行传递返回值来进行判断是否真正的执行了sql语句(可以不返回), ...
- Mybatis基础配置及增删查改操作
一.简介 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...