使用Java Collections比较和排序不同类型的对象

时间:2010-10-02 12:45:10

标签: java sorting collections

如何使用java Collections比较和排序不同类型的对象.Below是用例: 例如DOG,MAN,TREE,COMPUTER,MACHINE - 所有这些不同的对象都有一个共同的属性,即“int lifeTime”。现在我想根据lifeTime属性

来命令这些对象

THX

3 个答案:

答案 0 :(得分:9)

所有这些对象都应该有一个共同的抽象类/接口,例如Alive和方法getLifeTime(),你可以Alive扩展Comparable<Alive>或创建你的拥有Comparator<Alive>

public abstract class Alive extends Comparable<Alive>{
    public abstract int getLifeTime();
    public int compareTo(Alive alive){
        return 0; // Or a negative number or a positive one based on the getLifeTime() method
    }
}

public interface Alive {
    int getLifeTime();
}

public class AliveComparator implements Comparator<Alive>{
    public int compare(Alive alive1, Alive alive2){
        return 0; // Or a negative number or a positive one based on the getLifeTime() method
    }
}

之后,下一步是使用自动排序的集合(TreeSet<Alive>)或使用List<Alive>Collections.sort()进行排序。


资源:

答案 1 :(得分:1)

最简单的方法是让你的所有类都实现一个接口或扩展一个公开用于比较的公共属性(lifeTime)的基类。否则,您可以创建一个Comparator,它使用反射来获取lifeTime属性,并在比较器的比较方法中使用该值。当然,如果您的集合中包含一个没有lifeTime属性的对象,这将抛出异常。

答案 2 :(得分:1)

如果你的所有类都实现了一个定义的Living接口(在Java中总是一个好主意):

public interface Living {
    int getLifeTime();
}

您可以使用lambdaj库对生活对象的集合进行排序:

List<Alive> sortedLivings = sort(livings, on(Alive.class).getLifeTime());