2019独角兽企业重金招聘Python工程师标准>>>

用collection.sort()方法对list集合排序

第一种是list中的对象实现Comparable接口,如下:

/**
* 根据order对User排序
*/
public class User implements Comparable<User>{ private String name; private Integer order; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getOrder() { return order; } public void setOrder(Integer order) { this.order = order; } public int compareTo(User arg0) { return this.getOrder().compareTo(arg0.getOrder()); }
}

测试一下:

public class Test{public static void main(String[] args) { User user1 = new User(); user1.setName("a"); user1.setOrder(1); User user2 = new User(); user2.setName("b"); user2.setOrder(2); List<User> list = new ArrayList<User>(); //此处add user2再add user1 list.add(user2); list.add(user1); Collections.sort(list); for(User u : list){ System.out.println(u.getName()); } }
}

输出结果如下 

b

第二种方法是根据Collections.sort重载方法来实现,例如:

/**
* 根据order对User排序
*/
public class User { //此处无需实现Comparable接口 private String name; private Integer order; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getOrder() { return order; } public void setOrder(Integer order) { this.order = order; }
}

主类中这样写即可:

public class Test{ public static void main(String[] args) { User user1 = new User(); user1.setName("a"); user1.setOrder(1); User user2 = new User(); user2.setName("b"); user2.setOrder(2); List<User> list = new ArrayList<User>(); list.add(user2); list.add(user1); Collections.sort(list,new Comparator<User>(){ public int compare(User arg0, User arg1) { return arg0.getOrder().compareTo(arg1.getOrder()); } }); for(User u : list){ System.out.println(u.getName()); } }
}

输出结果如下 


前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合:

Collections.sort(list,new Comparator<User>(){ public int compare(User arg0, User arg1) {
//            第一次比较专业 int i = arg0.getOrder().compareTo(arg1.getOrder());
//            如果专业相同则进行第二次比较 if(i==0){
//                第二次比较 int j=arg0.getXXX().compareTo(arg1.getXXX());
//                如果学制相同则返回按年龄排序 if(j==0){ return arg0.getCCC().compareTo(arg1.getCCC()); } return j; } return i; } });

以下是另外一个例子

package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Exmployee> arrayList  = new ArrayList<Exmployee>() ;
arrayList.add(new Exmployee("zengqiang",new Integer(5000))) ;
arrayList.add(new Exmployee("zengmin",new Integer(4000))) ;
arrayList.add(new Exmployee("liuxiaojuan",new Integer(4200))) ;
arrayList.add(new Exmployee("giuming",new Integer(2200))) ;
Collections.sort(arrayList, new Comparator<Exmployee>(){
public int compare(Exmployee arg0, Exmployee arg1) {
return  arg1.getSalary()-arg0.getSalary() ; //按照工资升序
//return  arg0.getSalary()-arg1.getSalary() ; 按照工资降序
//return arg0.getName().compareTo(arg1.getName()) ; 按照姓名升序 }
});
for(Exmployee e:arrayList)
System.out.println(e.getName()+"'s salary is "+e.getSalary()) ;
}
}
class Exmployee {
public Exmployee(String name, int salary) {
this.name = name ;
this.salary = salary ;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
private int salary;
}

转载于:https://my.oschina.net/u/858284/blog/267524

对list中的元素按照元素的属性进行排序相关推荐

  1. java 对象多属性排序_java list按照元素对象的指定多个字段属性进行排序

    package com.enable.common.utils; import java.lang.reflect.Field; import java.text.NumberFormat; impo ...

  2. java list按照元素对象的指定多个字段属性进行排序

    ListUtils.java---功能类 package com.enable.common.utils; import java.lang.reflect.Field; import java.te ...

  3. java 对多个元素对象的排序_java list按照元素对象的指定多个字段属性进行排序...

    ListUtils.java---功能类 package com.enable.common.utils; import java.lang.reflect.Field; import java.te ...

  4. Java中根据对象的一个或多个属性进行排序

    Java中根据对象的一个或多个属性进行排序 使用情景 解决方法:使用一个工具类:ListUtils 具体使用: 创建一个正常实体类,不用实现comparable接口 调用ListUtiles,并用测试 ...

  5. java集合对象排序_java ArrayList集合中的某个对象属性进行排序的实现代码

    开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教. 1.Student的Bean如下: public class Student ...

  6. Redis 笔记(06)— set 类型(向集合添加元素、获取集合元素个数、判断集合中是否包含某个元素、删除给定元素、返回集合中所有元素、计算集合的交集、并集、差集)

    Redis 的 set 集合内部的键值对是无序的唯一的.它的内部实现相当于一个特殊的字典,字典中所有的 value 都是一个值 NULL .当集合中最后一个元素移除之后,数据结构自动删除,内存被回收. ...

  7. 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换。

    题目: /* 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换. */ 代码: c++做的. #include<iostream> using names ...

  8. python列表怎么写文件_python中以字典为元素的列表怎么写入文本文件

    python如何将列表中的元素添加进字典纵然被命运的铁蹄狠狠践踏,也顽强地长出自己的根芽. 录入自己和另一个人的名字的汉语拼音简写,然后依据标识符中字母的数值两个人,一颗心,依偎的不是爱情而是那小温暖 ...

  9. 求列表最大元素不用max_python3实现从一个无序列表中求取连续元素之和中最大的和...

    介绍 今天遇到一个需求,要求从一个无序列表中求取连续元素之和中最大的和.使用python做了实现,后来想着可以作为一个小知识点分享出来,或许能在某时某刻给某位同学一些帮助.下面就直接上代码(图片和文字 ...

  10. 面试:为什么foreach中不允许对元素进行add和remove

    来源 | 公众号 我是程序汪 阿粉的读者遇到了一个比较经典的面试题,也就是标题上说的,为什么 foreach 中不允许对元素进行 add 和 remove.阿粉就这个问题深入分析一下为什么不让使用 a ...

最新文章

  1. 使用 Android Studio 进行测试 (二) UI 测试
  2. Spring依赖注入(DI)
  3. 用js实现表格行的动态添加与删除
  4. [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向
  5. 云溪怎么导入dxf_dwg怎么转换成dxf文件?超详细图文教程分享
  6. Maven精选系列--依赖范围、传递、排除
  7. C语言基础知识整理(选择结构)
  8. GDataDate 的本地时间转换
  9. Costomize Print Output
  10. 实战:京东购物车静态界面实现
  11. Async.js——Node世界中被依赖最多的库No.3
  12. android 系统闹钟 问题,android 闹钟设置问题(示例代码)
  13. python生成词云图_python生成词云图
  14. 一个简单的教学管理系统(SQL实现)
  15. r720换固态硬盘后如何重装系统_联想拯救者r720笔记本NVME接口M.2固态硬盘怎么安装win7系统...
  16. linux 6 dns,RHEL6下搭建DNS服务器
  17. 【SaaS播客】onboard4. 连线硅谷顶尖Product-Led Growth公司产品经理,聊聊如何打造一流PLG产品
  18. 全国湿地分类数据:内陆沼泽、盐碱地、红树林、潮汐平地
  19. Java 的字节与字符输入/输出流的类整理——zyx笔记
  20. 最受欢迎的11个Python编程软件,让你的工作效率直接原地起飞

热门文章

  1. vscode如何及时提示flutter代码
  2. 计算机组成原理(分析计算题解析)内附填空,选择,解答题答案
  3. java计数循环及小技巧
  4. php无刷新分页插件,jQuery插件jPaginate实现无刷新分页_jquery
  5. go build 无文件_Go 质量保证:集成测试(1) 用 Docker 执行测试
  6. 原理 快速邻近匹配_论文推荐 | 陈晓勇:低空摄影测量立体影像匹配的现状与展望...
  7. linux下redis权限,Linux(Centos)下Redis开机自启设置
  8. shadowplay要下载java_Java并发程序设计(二)Java并行程序基础
  9. 单月营收超 12 亿元,叮咚买菜如何携手神策数据造就增长神话?
  10. 70 周岁快乐 | 盛世华诞,每一刻都值得铭记