java对象排序,java对对象排序

发布时间:2023-01-04

本文目录一览:

  1. java 如何对自定义的对象进行排序
  2. Java中对象按照属性排序
  3. Java中怎么给一个对象排序

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;
    }
}

注意:需要导入的三个包

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) 返回 falsee.compareTo(null) 也会抛出 NullPointerException。 强烈推荐(虽然不是必须的)使自然排序与 equals 一致。这是因为在使用其自然排序与 equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违反了根据 equals 方法定义的集合(或映射表)的惯例协议。 而 Comparator 比较函数强行对某些对象 collection 执行整体排序。可以将 Comparator 传递给 sort 方法(如 Collections.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如 TreeSetTreeMap)的顺序。