java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料

保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。

package com.hanchao.test;
/**
 * 实体类Step
 * @author liweihan (liweihan@sohu-inc.com)
 * @version 1.0 (2016年1月13日 下午4:30:59)
 */
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.hanchao.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.<a href="http://www.cfei.net/archives/tag/comparator" title="浏览关于“Comparator”的文章" target="_blank" class="tag_link">Comparator</a>;
import java.util.Date;

/**
 * 对Step类<a href="http://www.cfei.net/archives/tag/%e6%8e%92%e5%ba%8f" title="浏览关于“排序”的文章" target="_blank" class="tag_link">排序</a>的接口
 * @author liweihan (liweihan@sohu-inc.com)
 * @version 1.0 (2016年1月13日 下午4:35:26)
 */
public class StepComparator implements Comparator&lt;Step&gt;{
	
	private static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat( &quot;yyyy-MM-dd HH:mm:ss&quot; );

	/**
	 * 如果o1小于o2,返回一个负数。
	 * 如果o1大于o2,返回一个正数。
	 * 如果o1等于o2,则返回0
	 */
	@Override
	public int compare(Step o1, Step o2) {
		try {
			Date acceptTime1 = yyyyMMdd.parse(o1.getAcceptTime());
			Date acceptTime2 = yyyyMMdd.parse(o2.getAcceptTime());
			
			//对字段进行升序,如果要降序可以采用before方法
			if (acceptTime1.after(acceptTime2)) {
				return 1;
			}
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return -1;
	}

}
package com.hanchao.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import com.sohu.star.pojo.Album;

/**
 * @author liweihan (liweihan@sohu-inc.com)
 * @version 1.0 (2016年1月13日 下午4:47:49)
 */
public class StepComparatorTest {
	
	private static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );

	public static void main(String[] args) {
		
		List<Step> list = new ArrayList<Step>();
		Step step1 = new Step();
		step1.setAcceptAddress("step1");
		step1.setAcceptTime("2015-12-11 00:00:00");
		
		Step step2 = new Step();
		step2.setAcceptAddress("step2");
		step2.setAcceptTime("2016-01-10 00:00:00");
		
		Step step3 = new Step();
		step3.setAcceptAddress("step3");
		step3.setAcceptTime("2013-12-12 00:00:00");
		
		list.add(step1);
		list.add(step2);
		list.add(step3);
		
		//对集合对象进行排序
/*		StepComparator comparator = new StepComparator();
		Collections.sort(list,comparator);
		for (Step step : list) {
			System.out.println(step.getAcceptAddress());
		}*/
		//结果(升序):step3 step1 step2
		
		
		/**
		 * 当然我们还可以简化掉StepComparator类
		 */
		Collections.sort(list,new Comparator<Step>() {

			@Override
			public int compare(Step o1, Step o2) {
				try {
					Date acceptTime1 = yyyyMMdd.parse(o1.getAcceptTime());
					Date acceptTime2 = yyyyMMdd.parse(o2.getAcceptTime());
					
					//对字段进行降序,如果要升序可以采用after方法
					if (acceptTime1.before(acceptTime2)) {
						return 1;
					}
				} catch (ParseException e) {
					e.printStackTrace();
				}
				return -1;
			}
		});
		
		for (Step step : list) {
			System.out.println(step.getAcceptAddress());
		}
		//结果(降序):step2 step1 step3
		
		
		/**
		 * 我们对map集合做一下排序,每次添加后对map集合进行自动排序!
		 * 如果o1小于o2,返回一个负数。
		 * 如果o1大于o2,返回一个正数。
		 * 如果o1等于o2,则返回0
		 */
		Map<Integer,String> map = new HashMap<Integer, String>();
		map = new TreeMap<Integer, String>(new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
//				return o2 - o1;//倒叙
//				return o1 - o2;//正序
//				return o1 - o2  > 0 ? -1 : 1;//倒序
				return o1 - o2  > 0 ? 1 : -1;//正序
			}
		});
		
		map.put(5, "5");
		map.put(3, "3");
		map.put(2, "2");
		map.put(1, "1");
		map.put(4, "4");
		System.out.println(map);
		//结果:{1=1, 2=2, 3=3, 4=4, 5=5}
	}
	
}

本文出自 “我的JAVA世界” 博客,请务必保留此出处http://hanchaohan.blog.51cto.com/2996417/1734709

java排序Comparator

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。