本文目录一览:
java 如何对自定义的对象进行排序
//把排序规则交给sort方法。该方法就回按照你自定义的规则进行排序
java.util.Arrays.sort(users,new MyComparator());
for (int i = 0; i < users.length; i++){
System.out.println (users[i]);
}
}
class User{
String name;
int age ;
public User(String name,int age){
this.name = name;
this.age = age;
}
public String toString(){
return name+":::"+age;
}
}
class MyComparator implements Comparator{
public int compare(Object obj1, Object obj2 ){
User u1 = (User)obj1;
User u2 = (User)obj2;
if(u1.age > u2.age){
return 1;
}
else if(u1.age < u2.age){
return -1;
}
else{
//利用String自身的排序方法。
//如果年龄相同就按名字进行排序
Java中对象按照属性排序
项目中经常需要用到比如地区列表按照中文的拼音首字母排序 但是有时候获取到的地区列表是对象的形式 有地区id 地区名称两个属性 这里主要涉及到两个技术点 对象按属性排序 中文按拼音首字母排序 下面给出自己整理好的demo:
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
public class CompareTipA {
private int id;
private String name;
private String age;
@SuppressWarnings("unchecked")
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new CompareTipA(5, "五"));
list.add(new CompareTipA(6, "六"));
list.add(new CompareTipA(2, "二"));
list.add(new CompareTipA(4, "四"));
list.add(new CompareTipA(4, "四"));
list.add(new CompareTipA(1, "一"));
Comparator mycmp = ComparableComparator.getInstance();
mycmp = ComparatorUtils.nullLowComparator(mycmp); //允许null
mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序
ArrayList sortFields = new ArrayList();
Comparator comparator = Collator.getInstance(java.util.Locale.CHINA);
sortFields.add(new BeanComparator("name", comparator)); //name正序 (主)
sortFields.add(new BeanComparator("id", mycmp)); //id逆序 (副)
ComparatorChain multiSort = new ComparatorChain(sortFields);
Collections.sort(list, multiSort);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
/*
输出:
[id=2 name=二 age= ]
[id=6 name=六 age= ]
[id=4 name=四 age= ]
[id=4 name=四 age= ]
[id=5 name=五 age= ]
[id=1 name=一 age= ]
*/
}
public CompareTipA(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "[id=" + this.id + " name=" + this.name + " age=" + this.age + "]";
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
注意:需要导入的三个包
- commons-beanutils.jar
- commons-collections.jar
- commons-logging.jar
lishixinzhi/Article/program/Java/hx/201311/25790
Java中怎么给一个对象排序
Comparable
是一个自身以前支持自比较的(如String, Integer)的接口。Comparator
可以说是一个自用的比较器。当对象自身不支持自排序和自比较函数的时候,我们可以通过实现 Comparator
来比较两个对象的大小。Comparable
是一个比较通用的接口,用户可以通过它完成排序功能。而 Comparator
可以看作是一种算法,一种设计方式(可以看作是一个策略模式,就是不改变对象自身,而用一个策略对象改变对象行为)。Comparable
相比较较固定,与具体类绑定,Comparator
比较灵活,可以与任何需要完成功能的类绑定。Comparable
可以说是静态绑定,Comparator
可以说是动态绑定。
Comparable
此接口强行对实现它的每个类的对象执行整体排序。此排序被称为该类的自然排序,类的 compareTo
方法被称为它的自然比较方法。实现此接口的对象列表(和数组)可以被 Collections.sort
(和 Arrays.sort
)执行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。
对于类 C 的每一个 e1 和 e2 来说,当且仅当 (e1.compareTo((Object)e2) == 0)
与 e1.equals((Object)e2)
具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致。注意,null
不是任何类的实例,即使 e.equals(null)
返回 false
,e.compareTo(null)
也会抛出 NullPointerException
。
强烈推荐(虽然不是必须的)使自然排序与 equals 一致。这是因为在使用其自然排序与 equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违反了根据 equals
方法定义的集合(或映射表)的惯例协议。
而 Comparator
比较函数强行对某些对象 collection 执行整体排序。可以将 Comparator
传递给 sort
方法(如 Collections.sort
),从而允许在排序顺序上实现精确控制。还可以使用 Comparator
来控制某些数据结构(如 TreeSet
或 TreeMap
)的顺序。