文档章节

Comparator按照姓名、年龄排序

凯文加内特
 凯文加内特
发布于 2015/09/06 11:53
字数 479
阅读 1427
收藏 1
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);
	}
}


本文转载自:http://www.jb51.net/article/41730.htm

凯文加内特
粉丝 341
博文 701
码字总数 110786
作品 0
青岛
后端工程师
私信 提问
关于java8排序的实例讲解

java8以前 在java以前为了对集合排序,通常的做法是这样的 bean如下 private static class Person { } //这个例子是对集合中的元素按照年龄进行排序Collections.sort(people, new Comparator...

光与热的博客
2017/12/21
0
0
Java中先按照姓名排序在按照年龄排序 代码

package cn.Home; import java.util.Arrays; import java.util.Comparator; import org.junit.Test; public class Demo03 { @Test public void test1() { // 默认所有系统的类Int,Integer,d......

Harry_sir
2015/11/30
749
0
Java-比较器(Comparable、Comparator)

原文:http://blog.csdn.net/itmyhome1990/article/details/8952722 Comparable接口的作用 之前Arrays类中存在sort()方法,此方法可以直接对对象数组进行排序。 Comparable接口 可以直接使用...

u013063153
2017/11/05
0
0
Comparable与Comparator,java中的排序与比较

1:比较和排序的概念 比较:两个实体类之间按>,=,

luminji
2017/08/09
0
0
Java集合中List,Set以及Map等集合体系简述

概述: List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有ArrayList,Vector,LinkedList Map下有Hashtable,LinkedHas...

jirak
06/30
60
0

没有更多内容

加载失败,请刷新页面

加载更多

Handler简解

Handler 这里简化一下代码 以便理解 Handler不一定要在主线程建 但如Handler handler = new Handler(); 会使用当前的Looper的, 由于要更新UI 所以最好在主线程 new Handler() { mLooper = Lo...

shzwork
16分钟前
2
0
h5获取摄像头拍照功能

完整代码展示: <!DOCTYPE html> <head> <title>HTML5 GetUserMedia Demo</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum......

诗书易经
18分钟前
1
0
正向代理和反向代理

文章来源 运维公会:正向代理和反向代理 1、正向代理 (1)服务对象不同 正向代理服务器的服务对象是客户端,可以将客户端和代理服务器看作一个整体。 (2)配置方法不同 需要在客户端配置代...

运维团
35分钟前
2
0
5个避免意外论文重复率高的方法

即使你不是故意抄袭,但你可能在无意中抄袭了别人的论文, 这个叫做意外抄袭,它可能正发生在你身上,如果你不熟悉学术 道德规范,这里将告诉你5个基本的方法来避免意外抄袭。 Tip1 熟悉其他...

论文辅导员
36分钟前
2
0
Maven通过profiles标签读取不同的配置

<profiles> <profile> <id>dev</id> <properties> <profiles.active>dev</profiles.active> </properties> ......

时刻在奔跑
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部