List集合中元素排序
应用场景:
在开发中经常遇到要对List<Object>集合进行排序,并且是根据集合中的对象的某个属性来进行排序 --------以下就此做出的解决方案
public static final String DESC = "desc";
public static final String ASC = "asc"; /**
* 用途:对一个List集合数组进行排序
*
* 说明:
* 目前可以对List<java.lang.Class>、List<POJO>、List<Map>这三种类型集合进行排序
*
* @param list 排序操作的集合对象
* @param property 指定集合中元素的排序字段,如果集合元素不是对象类型可以传值为null
* @param sort 用于指定是升序还是降序 CollectionsUtil.DESC--降序 CollectionsUtil.ASC--升序
* @date 2018.04.27 PM
*/
public static <T> void sortOnList(List<T> list,final Object property,final String sort){
Collections.sort(list,new Comparator<T>(){
@Override
public int compare(T o1, T o2) {
Integer a1 = null;
Integer a2 = null;
if(o1 instanceof Integer) { //针对List<Integer>
a1 = (Integer) o1;
a2 = (Integer) o2;
} else if(o1 instanceof String) { //针对List<String>
a1 = Integer.valueOf(o1.toString());
a2 = Integer.valueOf(o2.toString());
} else if(o1 instanceof Map) { //针对List<Map<String,String>类型
Map temp1 = (Map) o1;
Map temp2 = (Map) o2;
Object object = temp1.get(property);
if(object instanceof Integer) {
a1 = (Integer) object;
a2 = (Integer) temp2.get(property);
} else if(object instanceof String){ //根据Map中value来进行排序String类型需要转换
a1 = Integer.parseInt(object.toString());
a2 = Integer.parseInt(temp2.get(property).toString());
}
} else { //针对对象类型
Class c1 = o1.getClass();
Class c2 = o2.getClass();
try {
Field declaredField1 = c1.getDeclaredField(property.toString());
Field declaredField2 = c2.getDeclaredField(property.toString());
declaredField1.setAccessible(true);
declaredField2.setAccessible(true);
a1 = Integer.parseInt(declaredField1.get(o1).toString());
a2 = Integer.parseInt(declaredField2.get(o2).toString());
} catch (Exception e) {
e.printStackTrace();
}
}
if(sort.equals(CollectionsUtil.ASC)) //升序
return a1.compareTo(a2);
else //降序
return a2.compareTo(a1);
}
});
}
以下代码原理:
Collections.sort(list,new Comparator<T>(){
@Override
public int compare(T o1, T o2){
}
}
根据集合中的元素,把o1与o2对象的某个数值型属性进行对比:
o1 - o2 >= 0 --- 升序
o1 - o2 < 0 --- 降序
sort方法是对List集合中对象某个属性来进行排序的,例如:
package hello1; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List; import hello.Student; public class Main { public static void main(String[] args) {
Student s1 = new Student();
s1.setId(6); Student s2 = new Student();
s2.setId(66); Student s3 = new Student();
s3.setId(1); Student s4 = new Student();
s4.setId(55); List<Student> list = new ArrayList<>();
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4); System.out.println("未排序结果:"+ list); //根据Student对象id属性排序
Collections.sort(list, new Comparator<Student>() { @Override
public int compare(Student o1, Student o2) {
return o1.getId() - o2.getId();
} }); System.out.println("排序后结果:"+ list); } }
运行结果 ======================》

欢迎路过的哥们提好建议
List集合中元素排序的更多相关文章
- C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响)
C#不允许在foreach循环中改变数组或集合中元素的值(注:成员的值不受影响),如以下代码将无法通过编译. foreach (int x in myArray) { x++; //错误代码,因为改变 ...
- 对list集合中元素按照某个属性进行排序
test 为集合中的元素类型(其中包含i属性) Collections.sort(list,(test o1, test o2) -> { if (o1.getI() != o2.getI()) ...
- Java集合中对象排序
集合中的对象排序需求还是比較常见的.当然我们能够重写equals方法,循环比較:同一时候Java为我们提供了更易使用的APIs.当须要排序的集合或数组不是单纯的数字型时,通常能够使用Comparato ...
- Android集合中对象排序
如果将集合中的对象进行排序,最近使用了一个简单的方法解决了,随笔记下来. 主要思路: 首先,新建类实现Comparator<?>,这个类是做比较的关键类,一般做比较的类型 int 或 St ...
- java按照集合中元素的属性进行排序示例代码
public class Student { private String name; private int age; private int id; public Student() { sup ...
- 关于List集合中元素排序问题
问题描述: 有一个list集合,其中元素是Student对象,根据student的age排序. Student对象 /** * description * * @author 70KG * @date ...
- Java 中List集合中自定义排序
/* 集合框架的工具类. Collections:集合框架的工具类.里面定义的都是静态方法. Collections和Collection有什么区别? Collection是集合框架中的一个顶层接口, ...
- Java删除List和Set集合中元素
今天在做项目时,需要删除List和Set中的某些元素,当时使用边遍历,边删除的方法,却报了以下异常: ConcurrentModificationException 为了以后不忘记,使用烂笔头把它记录 ...
- MT【215】集合中元素个数
设$M=\{1,2,3\cdots,2010\}$,$A$是$M$的子集且满足条件:当$x\in A$时$15x\notin A$,则$A$中的元素的个数最多是______ 分析:由于$x,15x,( ...
随机推荐
- Java并发框架——同步状态的管理
整个AQS框架核心功能都是围绕着其32位整型属性state进行,一般可以说它表示锁的数量,对同步状态的控制可以实现不同的同步工具,例如闭锁.信号量.栅栏等等.为了保证可见性此变量被声明为volatil ...
- Transform介绍(Unity3D开发之二)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=491 可能unity中接触较早的 ...
- 2. React JSX语法及特点介绍
什么是JSX JSX 是一种类 XML 语言,全称是 JavaScript XML .React 可以不使用 JSX来编写组件,但是使用JSX可以让代码可读性更高.语义更清晰.对 Re ...
- DVB-C系统中QAM调制与解调仿真
本文简单记录一下自己学习<通信原理>的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序.自己一直是研究"信源"方面的东西,所以对&q ...
- erMaster插件
需求: 在做开源项目时,了解基本业务后.试图从数据库表设计来分析项目.通过visio时绘制操作繁琐,另外不能与数据库连动.于是想找一款快速绘制er图,并且能够和数据库连动的软件工具. eclipse插 ...
- 从二进制数据流中构造GDAL可以读取的图像数据
在很多时候,我们的图像数据往往都不是文件方式存储在磁盘上,而是可能从网络或者数据库中获取的是二进制的图像数据流.最简单的方式和最容易想到的方式就是将这个文件流保存到磁盘上形成一个文件,然后再使用GDA ...
- android 中List转换String,String转换List 改进版本
原来博客地址http://blog.csdn.net/qq7342272/article/details/6830907 使用原作者贴的代码不是很好用,不能正常运行,所以我稍微改进了一下,特来分享给大 ...
- Cocos2D:塔防游戏制作之旅(十)
最终,draw方法显示这些路径点被放置在哪里,并且绘制出路径点之间的连线,它们仅仅被用作调试.一个成品游戏不应该绘制敌人的路径 - 那对于玩家来说太过容易了! 创建路径点的列表.打开HelloWorl ...
- 04-GIT TortoiseGit冲突和补丁演示 案例演示
TortoiseGit安装下载 http://download.tortoisegit.org/tgit/1.8.12.0/ 或https://code.google.com/p/tortoisegi ...
- 基于MSRDS机器人仿真平台的多机器人PID编队控制算法
自己调试的编队PID算法,效果也还可以,具体使用教程参考视频链接: http://v.youku.com/v_show/id_XMTUwNjc3NjMyNA 仿真中三个机器人保持编队,做直线运动,队形 ...