comparator的简单学习(集合排序)

package com.hanchao.test;
/**
 * 实体类Step
 * @author liweihan ([email protected])
 * @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.Comparator;
import java.util.Date;

/**
 * 对Step类排序的接口
 * @author liweihan ([email protected])
 * @version 1.0 (2016年1月13日 下午4:35:26)
 */
public class StepComparator implements Comparator<Step>{

	private static final SimpleDateFormat yyyyMMdd = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" );

	/**
	 * 如果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 ([email protected])
 * @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}
	}

}
时间: 2024-10-07 08:43:14

comparator的简单学习(集合排序)的相关文章

最简单的List集合排序方法

将数组按照一定的规则排序最简单的方法就是借助Arrays类的sort方法,那么要实现List集合排序的排序最简单的方式又是什么呢?当然是借助Collections类的sort方法,下面以一个例子来说明如何使用该方法实现List集合的排序: 代码一: package com.ghj.packageofvo; public class User { private String name; //姓名 private String birthday;//出生日期 public User(String

集合排序: Comparator和Comparable的使用区别

Comparator接口 Comparable接口 区别 在Java中使用集合来存储数据时非常常见的,集合排序功能也是常用功能之一.下面看一下如何进行集合排序,常用的方法有: Comparator和Comparable Comparator接口 使用步骤: 新建比较类, 实现Comparator接口, 重写compare方法, package sort; import java.util.Comparator; public class LuckBoyCompare implements Com

java中重写Comparator对两个list集合排序

public class test{ public static void main(String[] args) { List<LeaveRequest>  LvRequestList=new List<LeaveRequest>(); List<OtRequest> otRequestList=new List<OtRequest>(); List   allList=new List(); allList.addAll( LvRequestList);

Java集合排序及java集合类详解--(Collection, List, Set, Map)

1         集合框架 1.1         集合框架概述 1.1.1         容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情. 举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号.我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内

java集合排序方法sort的使用

转自  http://blog.csdn.net/a1165117473/article/details/6965652 /** To change this template, choose Tools | Templates* and open the template in the editor.*/ package com.city.test; import java.util.Arrays;import java.util.Comparator;/**** @author LiuB*/

mongodb,redis简单学习

2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 1)增删改查 insert方法:dp.person.insert({"name":"jack","age":20}) find方法:db.person.find(): db.person.find({"name":joe}) 1.$type匹配过滤:db.person.find({"na

Java-集合--Java集合排序

Java集合排序 前几天在工作的当中遇到对List<Map<String,String>>这样的数据结构按照Map<String,String>中的某个字段排序, 具体的实现为: <span style="font-size:18px;">public void sortList(List<Map<String, String>> list, final String field) { Collections.so

《大话数据结构》学习笔记 排序

排序的严格定义:  假设含有n个记录的序列为{r1,r2,......,rn},对应的关键字分别为{k1,k2......,kn},需确定1,2,......,n的一种排列p1,p2,......,pn,使其相应的关键字 满足Kp1<=Kp2<=......Kpn关系,即使得序列成为一个按关键字有序的序列(rpq,rp2,......rpn),此操作称为排序.  排序的稳定性:内排序与外排序(根据记录是否全部放置在内存中). 根据排序中的主要操作,可以分为插入排序类(直接插入排序->希尔

mysql 存储过程简单学习

转载自:http://blog.chinaunix.net/uid-23302288-id-3785111.html ■存储过程Stored Procedure 存储过程就是保存一系列SQL命令的集合,将这些sql命令有组织的形成一个小程序,这样会实现很复杂的处理 SQL基本是一个命令一个命令执行,虽然可以通过连接.子查询等实现些高级的处理,但局限性是显而易见的 ■存储过程的优势 1.提高执行性能(存储过程事先完成了解析.编译的处理,执行时能减轻数据库负担) 2.可减轻网络负担(比起多次传递SQ