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开发常用知识点作了一下记录,从 ...
随机推荐
- 脑图和MarkDown
使用脑图整理前端体系 根据以下网址整理 http://web.jobbole.com/84062/ http://naotu.baidu.com/ 学习MarkDown语法格式 (一) 标题 在首行插 ...
- python 定位
#字符串定位 使用str.find() 其结果为如下: #列表中元素的定位 使用list.index() 其结果如下:
- 2016 CCPC-Final
A.The Third Cup is Free #include <bits/stdc++.h> using namespace std; typedef long long ll; in ...
- 牛客网36-A,B题解
A.Rabbit的字符串 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 Rabbit得到了一 ...
- Python基本的数据类型(补发)
python基本的数据类型 一.python的基本数据类型 int => 整数,主要用来进行数学运算 str ==> 字符串 可以用来保存少量数据并进行相应操作 bool ==> ...
- js中 前台日期时间使用方法总结
(1)JQuery EasyUI 1.4.2 版本中的 DateTimeBox(时间日期输入框) 参考本地帮助文档. (2)jquery.datetimepicker 单独使用的包 只 ...
- 061 Rotate List 旋转链表
给定一个链表,将链表向右旋转 k 个位置,其中 k 是非负数.示例:给定 1->2->3->4->5->NULL 且 k = 2,返回 4->5->1-> ...
- python之三级菜单
python之三级菜单 要求: 1. 运行程序输出第一级菜单 2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单 3. 菜单数据保存在文件中 4. 让用户选择是否要退出 5. 有返回上一级菜单的功 ...
- 关于锚点页内链接跳转出现问题(不响应,没有反应)的解决方法(ZT)
我们知道,利用锚点可以实现页面链接跳转,也可以实现同一页面内的跳转功能. 例如:<a href="somepage.htm>某页面链接</a> 可以跳转链接到som ...
- elasticsearch 2.4 windows版jvm内存设置
本文编写目的是因为网上有很多es修改内存配置的文章,方法也各有不同,但在我的情况下(es 2.4 windows版)发现很多方法都是无效的,有效只有以下方法 第一个是xms,第二个是xmx