码迷,mamicode.com
首页 > 编程语言 > 详细

Comparator按照姓名、年龄排序

时间:2015-09-06 13:09:34      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:

package com.heli.compare;

import java.text.Collator;
import java.util.Comparator;
import java.util.Locale;

/**
 * @desc Person类。 Person实现了Comparable接口,这意味着Person本身支持排序
 */
public class Person implements Comparable<Person> {
	int age;
	String name;

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}

	public String toString() {
		return name + " - " + age;
	}

	/**
	 * 比较两个Person是否相等:若它们的name和age都相等,则认为它们相等
	 */
	boolean equals(Person person) {
		if (this.age == person.age && this.name == person.name)
			return true;
		return false;
	}

	/**
	 * @desc 实现 “Comparable<String>” 的接口,即重写compareTo<T t>函数。
	 *       这里是通过“person的名字”进行比较的
	 */
	@Override
	public int compareTo(Person person) {
		return name.compareTo(person.name);
		// return this.name - person.name;
	}
}

/**
 * @desc AscAgeComparator比较器 它是“Person的age的升序比较器”
 */
class AscNameComparator implements Comparator<Person> {
	@Override
	public int compare(Person p1, Person p2) {
		String one = p1.getName();
		String two = p2.getName();
		Collator ca = Collator.getInstance(Locale.CHINA);
		int flags = 0;
		if (ca.compare(one, two) < 0) {
			flags = -1;
		} else if (ca.compare(one, two) > 0) {
			flags = 1;
		} else {
			flags = 0;
		}
		return flags;
	}
}

/**
 * @desc AscAgeComparator比较器 它是“Person的age的升序比较器”
 */
class AscAgeComparator implements Comparator<Person> {
	@Override
	public int compare(Person p1, Person p2) {
		return p1.getAge() - p2.getAge();
	}
}

/**
 * @desc DescAgeComparator比较器 它是“Person的age的升序比较器”
 */
class DescAgeComparator implements Comparator<Person> {
	@Override
	public int compare(Person p1, Person p2) {
		return p2.getAge() - p1.getAge();
	}
}
package com.heli.compare;

import java.util.ArrayList;
import java.util.Collections;

public class Test {

	public static void main(String[] args) {
		// 新建ArrayList(动态数组)
		ArrayList<Person> list = new ArrayList<Person>();
		// 添加对象到ArrayList中
		list.add(new Person("郭德纲", 20));
		list.add(new Person("安华", 30));
		list.add(new Person("赵紫阳", 10));
		list.add(new Person("单田芳", 40));
		// 打印list的原始序列
		System.out.printf("Original  sort, list:%s\n", list);
		// 对list按照中文姓氏排序,暂未实现多音字,如单田芳 应该shantianfang
		Collections.sort(list, new AscNameComparator());
		System.out.printf("Asc(family name)  sort, list:%s\n", list);
		// 通过“比较器(AscAgeComparator)”,对list进行排序
		// AscAgeComparator的排序方式是:根据“age”的升序排序
		Collections.sort(list, new AscAgeComparator());
		System.out.printf("Asc(age)  sort, list:%s\n", list);
		// 通过“比较器(DescAgeComparator)”,对list进行排序
		// DescAgeComparator的排序方式是:根据“age”的降序排序
		Collections.sort(list, new DescAgeComparator());
		System.out.printf("Desc(age) sort, list:%s\n", list);
	}
}


Comparator按照姓名、年龄排序

标签:

原文地址:http://my.oschina.net/ydsakyclguozi/blog/501643

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!