包含基于Java中的属性数据的对象的订单列表

时间:2015-08-15 12:06:27

标签: java sorting enums

我需要在&Foo' Foo'基于Foo具有的Enum值的对象作为属性。我找到了' Comparators',我之前使用过它们。但我总是有一些整数/双属性,这对我来说更清晰。

因为这个问题可能含糊不清,所以我会制作一些勺子代码,以便你们可以看到我的意思/想要的东西。非常感谢!

/* Enum class */
public enum SomeEnum {
   CONSTANT_ALPHA, CONSTANT_BETA, CONSTANT_DELTA;
}

/* Class 'Foo', this is my Foo object */
public class Foo {
    private SomeEnum enum; /* Every 'Foo' has a enum type */

    public Foo(SomeEnum enum){ 
        this.enum = enum; 
    }

    public SomeEnum getEnum(){ 
        return enun;
    }
}

/* Imagine this below is some controller class*/

 Foo alpha1 = new Foo(SomeEnum.CONSTANT_ALPHA);
 Foo beta1 = new Foo(SomeEnum.CONSTANT_BETA);
 Foo alpha2 = new Foo(SomeEnum.CONSTANT_ALPHA);
 Foo delta1 = new Foo(SomeEnum.CONSTANT_DELTA);
 Foo beta2 = new Foo(SomeEnum.CONSTANT_BETA);

 List<Foo> list = new ArrayList<>();
 list.add(alpha1);
 //list.add(beta1) etc etc (all those 5 Foos)

 Collections.sort(list, someComparatorIDontKnowHowToMake);

 System.out.println(list.toString()); /* Not sure how to correctly print a List<> object, but imagine I would print the contents of the list*/

 /* The result of the list should be: */
 /* alpha1, alpha2, beta1, beta2, delta1*/

总结或TL; DR:

我需要使用相同的Enum类型对列表中的对象进行排序。我不需要拥有&#39; alpha&#39;之前的'delta&#39;特别。我只是希望具有相同枚举值的Foo对象在List中彼此相邻。

如果这没有意义,请询问!

感谢。

2 个答案:

答案 0 :(得分:2)

您只需比较enum

Foo元素即可
foos.sort(new Comparator<Foo>() {

    @Override
    public int compare(Foo o1, Foo o2) {
        //Add null check
        return  o1.getEnum().compareTo(o2.getEnum());
    }
});

答案 1 :(得分:2)

无法正确测试代码,因此可能存在一些语法问题,但重点是:枚举实例是不同的整数,因此您可以只比较Foo实例。

Collections.sort(list, new Comparator<Foo>(){
        public compare(Foo first, Foo second){
            return first.getEnum().comapareTo(second.getEnum());
        }
    });

for(Foo item : list){
    System.out.println(item);
}

请注意,此代码假定getEnum()不会为列表中的任何实例返回null,并且您将为Foo实现toString()方法。

编辑,是的,总是来不及。