汉字排序问题例子

package test.HanziPaixu;

import java.text.Collator;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Collections;


class Person{
	private int id;
	private String name;
	
	public Person(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	@Override
	public String toString()
	{
		return  this.id + " " +  this.name;
	}
};


/**
 * @Title:             SortChineseName.java
 * @Description:    中文字符排序
 * @Function:       中文字符排序
 * @Copyright:      Copyright (c) 2012-11-19
 * @Version         0.1
 * 该接口用于对象与对象间的比较,返回值意味着这两对象之间的大小关系。
 * -1代表前者小,0代表两者相等,1代表前者大。
 */
class SortChineseName implements Comparator<Person>{
        //这句话是关键
	Collator cmp = Collator.getInstance(java.util.Locale.CHINA);
	@Override
	public int compare(Person o1, Person o2) {
		if (cmp.compare(o1.getName(), o2.getName())>0){
			return 1;
		}else if (cmp.compare(o1.getName(), o2.getName())<0){
			return -1;
		}
		return 0;
	}
};


public class HanziPaixuTest {
	 public static void main(String args[]){  
	        List<Person> list = new ArrayList<Person>();  
	        Person p = new Person(1,"安全");  
	        list.add(p);  
	        p = new Person(2,"保罗");  
	        list.add(p);  
	        p = new Person(3,"秋思");  
	        list.add(p);  
	        p = new Person(4,"本司");  
	        list.add(p);  
	        //正序  
	        Collections.sort(list, new SortChineseName());  
	        System.out.println("中文名称从小到大正序排列:");  
	        for (Person pp:list){
	            System.out.println(pp);  
	        }  
	        //倒序  
	        Collections.reverse(list);  
	        System.out.println("中文名称从大到小倒序排列:");  
	        for (Person pp:list){  
	            System.out.println(pp);  
	        }
	        Collections.sort(list,Collections.reverseOrder(new SortChineseName()));  
	        System.out.println("中文名称倒序排列:");  
	        for (Person pp:list){  
	            System.out.println(pp);  
	        }  
	    }  
};



你可能感兴趣的:(排序)