我需要在&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中彼此相邻。
如果这没有意义,请询问!
感谢。
答案 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()方法。
编辑,是的,总是来不及。