java中List排序 例子
package test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
Map<String,Object> m1 = new HashMap<String,Object>();
m1.put("NO", 2);
m1.put("NO1", "2");
m1.put("NO2", "f");
list.add(m1);
Map<String,Object> m2 = new HashMap<String,Object>();
m2.put("NO", 1);
m2.put("NO1", "10");
m2.put("NO2", "z");
list.add(m2);
Map<String,Object> m3 = new HashMap<String,Object>();
m3.put("NO", 1);
m3.put("NO1", "10");
m3.put("NO2", "a");
list.add(m3);
Test test = new Test();
test.getSortedList(list,new String[]{"NO","NO1","NO2"});
System.out.println(list);
}
private void getSortedList(List<Map<String, Object>> list, String[] pros) {
if (pros.length <= 0)
return;
for (int i = pros.length - 1; i >= 0; i--) {
final String pro = pros[i];
try {
Collections.sort(list, new Comparator<Map<String, Object>>() {
String name = "get";
Method method = Map.class.getMethod(name, new Class[] {Object.class});
public int compare(Map<String, Object> a, Map<String, Object> b) {
if (a == null || b == null) {
return 0;
} else {
int flag = 0;
try {
Object as = method.invoke(a, new Object[] {pro});
Object bs = method.invoke(b, new Object[] {pro});
if (as == null && bs == null)
return 0;
else if (as == null)
return -1;
else if (bs == null)
return 1;
else {
if (as instanceof Integer) {
Integer va = (Integer) as;
Integer vb = (Integer) bs;
flag = va.compareTo(vb);
}else if (as instanceof String) {
String va = (String) as;
String vb = (String) bs;
flag = va.compareTo(vb);
}
}
} catch (IllegalArgumentException e) {
System.out.println("e1");
} catch (IllegalAccessException e) {
System.out.println("e2");
} catch (InvocationTargetException e) {
System.out.println("e3");
}
return flag;
}
}
});
} catch (NoSuchMethodException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
执行结果:
[{NO=1, NO2=a, NO1=10}, {NO=1, NO2=z, NO1=10}, {NO=2, NO2=f, NO1=2}]
分享到:
相关推荐
java中数组的自定义排序,种类繁多,简单实现,可自由操控。
Java 类自定义排序
Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和ScoreDocComparator接口.在...
主要介绍了JAVA使用Comparator接口实现自定义排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
用JAVA实现的8大排序方法,有兴趣的可以一起研究
文件按照window 的排序规则-Java实现。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Java自定义排序详解
Java排序算法包 支持多种排序 支持各种排序要求 前提是自己写了排序的比较器
主要介绍了Java针对ArrayList自定义排序的2种实现方法,结合实例形式总结分析了Java操作ArrayList自定义排序的原理与相关实现技巧,需要的朋友可以参考下
java没有结构体,所以在算法竞赛中有时候对于有多个属性属于同一个事物,这时候就要创建一个类来存储,而算法竞赛中往往有多个数据,所以要用对象数组来存储。如果要按照某一个属性来对这个对象数组进行升序或降序...
主要介绍了java8 stream自定义分组求和并排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
下面小编就为大家带来一篇java中实现Comparable接口实现自定义排序的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
可以通过两种方式自定义对象的属性大小进行比较,对一个list或数组对根据属性排序一个list或数组
基于Java实现的短语搜索,支持公司名称、地址名称等短语的搜索,支持自定义排序、拼音处理,内置jetty提供web接口 使用方法: cd phrase-search unix类操作系统执行: chmod +x startup.sh & ./startup.sh ...
通过solr实现电商搜索排名打分,排序,可自定义打分规则
给定字符串 S 和单词字典 words, 求 words[i] 中是 S 的子序列的单词个数。 示例: 输入: S = “abcde” words = [“a”, “bb”, “acd”, “ace”] 输出: 3 解释: 有三个是 S 的子序列的单词: “a”, “acd”, ...
用java 实现的排序系统,有冒泡、直接插入、快排、折半、选择排序5种方法实现。并且支持生成随机数或者用户自定义输入,然后选择排序算法。。挺完善的排序系统,可用eclipse直接运行,没有错误。
DisplayTag是个很好的jsp标签,目前最新版本为1.2,支持了自定义分页,解决了之前版本每次查询都把全部数据查出的低效率做法。但是DisplayTag默认是通过url传参,以及分页导航不灵活给人们带来了不少麻烦。鉴于此...