如何对List集合中的对象进行按某个属性排序
我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序
当list集合中的元素类型是我们自定义类型时,有两种对list中的元素进行排序的方法:
方法一
让list集合中的元素类型,也就是我们自定义的类实现Comparable<T>接口,并在类中编写public int compareTo(T o)方法。如下所示:
1 public class Test
2 {
3 public static void main(String[] args)
4 {
5 ArrayList<Entity> list=new ArrayList<Entity>();
6 list.add(new Entity("李四",24));
7 list.add(new Entity("张三",13));
8 list.add(new Entity("王五",25));
9 System.out.println("排序前:"+list);
10 Collections.sort(list);
11 System.out.println("排序后:"+list);
12 }
13 }
14 class Entity implements Comparable<Entity>
15 {
16 String name;
17 int age;
18 public Entity(String name, int age) {
19 super();
20 this.name = name;
21 this.age = age;
22 }
23 public String getName() {
24 return name;
25 }
26 public void setName(String name) {
27 this.name = name;
28 }
29 public int getAge() {
30 return age;
31 }
32 public void setAge(int age) {
33 this.age = age;
34 }
35 @Override
36 public String toString() {
37 return "Entity [name=" + name + ", age=" + age + "]";
38 }
39 @Override
40 public int compareTo(Entity o)
41 {
42 if(this.getAge()>o.getAge())
43 {
44 return 1;
45 }
46 else if(this.getAge()<o.getAge())
47 {
48 return -1;
49 }
50 else
51 {
52 return 0;
53 }
54 }
55 }
我们想对Entity这个类型按照age属性值从小到大排序,则方法一是让Entity这个类实现Comparable<Entity>接口,并编写public int compareTo(Entity o) 方法。这样使用Collections.sort(list);就可以对list中的对象进行按照age大小排序。
输出结果:
排序前:[Entity [name=李四, age=24], Entity [name=张三, age=13], Entity [name=王五, age=25]]
排序后:[Entity [name=张三, age=13], Entity [name=李四, age=24], Entity [name=王五, age=25]]
方法二
方法二就是在排序的时候,给sort()方法传入一个比较器。具体来说,就是传入一个实现比较器接口的匿名内部类,目的是告诉sort()方法,按照比较器来对list中的对象进行排序。如下所示:
1 public class Test
2 {
3 public static void main(String[] args)
4 {
5 ArrayList<Entity> list=new ArrayList<Entity>();
6 list.add(new Entity("李四",24));
7 list.add(new Entity("张三",13));
8 list.add(new Entity("王五",25));
9 System.out.println("排序前:"+list);
10 Collections.sort(list,new Comparator<Entity>() {
11 @Override
12 public int compare(Entity o1, Entity o2)
13 {
14 if(o1.getAge()>o2.getAge())
15 {
16 return 1;
17 }
18 else if(o1.getAge()<o2.getAge())
19 {
20 return -1;
21 }
22 else
23 {
24 return 0;
25 }
26 }
27 });
28 System.out.println("排序后:"+list);
29 }
30 }
31 class Entity
32 {
33 String name;
34 int age;
35 public Entity(String name, int age) {
36 super();
37 this.name = name;
38 this.age = age;
39 }
40 public String getName() {
41 return name;
42 }
43 public void setName(String name) {
44 this.name = name;
45 }
46 public int getAge() {
47 return age;
48 }
49 public void setAge(int age) {
50 this.age = age;
51 }
52 @Override
53 public String toString() {
54 return "Entity [name=" + name + ", age=" + age + "]";
55 }
56 }
当给sort()方法传入比较器的时候,sort()方法就会根据比较器来对list中的对象进行排序。
输出结果:
排序前:[Entity [name=李四, age=24], Entity [name=张三, age=13], Entity [name=王五, age=25]]
排序后:[Entity [name=张三, age=13], Entity [name=李四, age=24], Entity [name=王五, age=25]]
而sort()方法为什么能对String类型的数据进行排序呢?
答案是,String这个类实现了Comparable<String>接口。所以,可以直接用Collections.sort(list);来对String类型的数据进行排序。
如何对List集合中的对象进行按某个属性排序的更多相关文章
- List集合中的对象按照某个字段去重实现
package com.liying.banana.user; import java.util.ArrayList; import java.util.Comparator; import java ...
- 向集合中添加Person类型并对其排序
package com.bjpowernode.t03sort; import java.util.ArrayList;import java.util.Collections; /* * 向集合中添 ...
- 将java中Map对象转为有相同属性的类对象(json作为中间转换)
java中Map对象转为有相同属性的类对象(json作为中间转换) 准备好json转换工具类 public class JsonUtil { private static ObjectMapper o ...
- 对list集合中的对象进行排序(转载)
原文链接:http://blog.csdn.net/veryisjava/article/details/51675036 Collections对List集合中的数据进行排序 有时候需要对集合中的元 ...
- Struts2的表单标签还可以为集合中的对象赋值
•Struts 还允许填充 Collection 里的对象, 这常见于需要快速录入批量数据的场合 代码如下 : TestCollectionAction.java package com.atgu ...
- JAVA里List集合中的对象根据对象的某个属性值降序或者升序排序
需要使用JDK1.8及以上 package com.stream; import java.util.Comparator; import java.util.List; public class T ...
- List集合中的数据按照某一个属性进行分组
有的时候,我们需要在java中对集合中的数据进行分组运算.例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的ty ...
- 关于java中对list集合中的数据按照某一个属性进行分组
有的时候,我们需要在java中对集合中的数据进行分组运算. 例如:Bill对象有money(float)和type(String)属性,现有个集合List<Bill>,需要按照Bill的t ...
- 用Java集合中的Collections.sort方法对list排序的两种方法
用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
随机推荐
- makefile实验三 理解make工作的基本原则
代码简单,但测试花样多,若能回答对本博客的每个步骤的预期结果,可以说对makefile的基础掌握是扎实的. 一,当前的makefile代码 root@ubuntu:~/Makefile_Test# r ...
- 从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建
一.Overview 最近的一段时间,在公司里我都在进行基于 Jenkins 和 SonarQube 配合已有的 Gitlab 搭建部门的持续集成环境的工作,虽然之前有使用过 GitHub Actio ...
- 许嵩新歌《放肆》发布 && 递归 + Stream+Lambda相遇成树
一.<放肆>如约而至 今早5:00在迷迷糊糊中醒来,打开手机一看,许嵩又发新歌了,名字叫做<放肆>,澎湃的旋律,依旧古典高雅的用词,这个大男孩,已经不像12年那时候发些伤感非主 ...
- 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令
一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调 ...
- 第3天 | 12天搞定Python,用VSCode编写代码
Visual Studio Code (简称 VS Code), 是一款免费并且开源的现代化轻量级代码编辑器,支持语法高亮.智能代码补全.自定义热键.括号匹配.代码片段等特性,并针对网页开发做了优化. ...
- python的PEP8代码规范
一.缩进:每级缩进用4个空格.如果缩进不正确或缩进格式不统一,一般错误信息会明确告诉你,但有时也会出现invalid syntax报错.所谓缩进不正确,python的缩进是四个空格或一个TAB,如果缩 ...
- 多测师讲解selenium—自动化测试课堂面试题总结—高级讲师肖sir
1.你有做过自动化?你用什么语言? python2.自动化中如何使用语言打开一个网址?浏览器,浏览器对应驱动,导入库,类,get,url3.在一个浏览器中打开多个窗口?open_windows dri ...
- day02 Pyhton学习
1.昨日内容回顾 1.python是一门解释型,弱类型的高级编程语言 优点: 1.优雅简单明确 2.短小快,代码短,代码量小,开发效率高 缺点: 1.运行效率低(相对) 2.python解释器 Cpy ...
- day34 Pyhton 网络编程
一今日内容 # 函数 # 面向对象 # 进阶 # 网络编程 4 # 并发编程 6-7 # 概念 # 网络基础 # 局域网的概念 # 交换机和路由器的工作流程 # ip地址 # mac地址 # 子网掩码 ...
- Token 、Cookie和Session的区别
本文转至http://blog.csdn.net/tobetheender/article/details/52485948 https://blog.csdn.net/axin66ok/articl ...