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

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

谢谢

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

 public abstract class Alive extends Comparable{ 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{ public int compare(Alive alive1, Alive alive2){ return 0; // Or a negative number or a positive one based on the getLifeTime() method } } 

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


资源:

  • Javadoc – Collections.sort()
  • Javadoc – 可比较
  • Javadoc – 比较器

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

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

 public interface Living { int getLifeTime(); } 

您可以使用lambdaj库对Living对象的集合进行排序,如下所示:

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