在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标。
例子1:
package com.ljq.entity;
/**
* 运号单流程
*
* @author Administrator
*
*/
public class Step{
/** 处理时间 */
private String acceptTime = "";
/** 快件所在地点 */
private String acceptAddress = "";
public Step() {
super();
}
public Step(String acceptTime, String acceptAddress) {
super();
this.acceptTime = acceptTime;
this.acceptAddress = acceptAddress;
}
public String getAcceptTime() {
return acceptTime;
}
public void setAcceptTime(String acceptTime) {
this.acceptTime = acceptTime;
}
public String getAcceptAddress() {
return acceptAddress;
}
public void setAcceptAddress(String acceptAddress) {
this.acceptAddress = acceptAddress;
}
}
package com.ljq.entity;
import java.util.Comparator;
import java.util.Date;
import com.ljq.util.UtilTool;
/**
* 对Step类进行排序
*
* @author Administrator
*
*/
public class StepComparator implements Comparator<Step>{
/**
* 如果o1小于o2,返回一个负数;如果o1大于o2,返回一个正数;如果他们相等,则返回0;
*/
@Override
public int compare(Step o1, Step o2) {
Date acceptTime1=UtilTool.strToDate(o1.getAcceptTime(), null);
Date acceptTime2=UtilTool.strToDate(o2.getAcceptTime(), null);
//对日期字段进行升序,如果欲降序可采用before方法
if(acceptTime1.after(acceptTime2)) return 1;
return -1;
}
}
package junit;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
public class StepComparatorTest {
@Test
public void sort() throws Exception{
List<Step> steps=new ArrayList<Step>;
//对集合对象进行排序
StepComparator comparator=new StepComparator();
Collections.sort(steps, comparator);
if(steps!=null&&steps.size()>0){
for(Step step:steps){
System.out.println(step.getAcceptAddress());
System.out.println(step.getAcceptTime());
}
}
}
}
例子2
如果List<Object>中Object实现了Comparator接口,便可以直接用以下的方式对
List进行排序
如List<String> list,通过list.add("abc")等操作为list添加了一些元素,
通过以下代码即可完成排序:
Collections.sort(list)
由于使用了默认的排序规则,所以sort只传入了list这一个参数,但这确实过于局限了,
为了是比较更多样化(比较的类多样化或比较方式多样化),可以通过自定义比较类,
让其声明Comparator接口,然后重新其中的compare方法即可:
[java] view plaincopy在CODE上查看代码片派生到我的代码片
01.package comXXX;
02.
03.import java.util.Comparator;
04.import java.util.Map;
05.
06.public class ComparatorMap implements Comparator{
07.
08. public int compare(Object arg0, Object arg1) {
09. Map<String, Object> map1 = (Map<String, Object>)arg0;
10. Map<String, Object> map2 = (Map<String, Object>)arg1;
11.
12. String map1String = (String) map1.get("filename");
13. String map2String = (String) map2.get("filename");
14.
15. return (map1String.toLowerCase()).compareTo(map2String.toLowerCase());
16. }
17.}
程序很简单,类ComparatorMap声明了Comparator接口,故需要实现compare方法。
compare方法需要传入两个比较的对象,这里以Map为例(故list中存储的是Map类型的数据)。
比较Map中的key值为filename的变量的大小,返回比较结果即可。
在需要排序的地方,对list进行如下操作即可(list类型为List<Map<String, Object>>):
[java] view plaincopy在CODE上查看代码片派生到我的代码片
01.ComparatorMap comparator=new ComparatorMap();
02.Collections.sort(list, comparator);
comparator即为你的自定义比较类,其中有compare方法定义了比较规则。
将comparator做为参数传入Collections.sort方法,便可以按照你自定义的规则对
List中元素进行排序操作了
原地址:http://www.cnblogs.com/linjiqin/archive/2011/08/31/2160360.html
http://blog.csdn.net/yuanbohx/article/details/22699353