Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中基于属性数据的带有对象的订单列表_Java_Sorting_Enums - Fatal编程技术网

Java中基于属性数据的带有对象的订单列表

Java中基于属性数据的带有对象的订单列表,java,sorting,enums,Java,Sorting,Enums,我需要根据Foo作为属性的枚举值,使用“Foo”对象对列表进行排序。我找到了“比较器”,我以前也用过。但我总是有一些整数/双属性,这对我来说更清楚 因为这个问题可能很模糊,我会制作一些匙形代码,这样你们就可以明白我的意思/想要什么。非常感谢 /* Enum class */ public enum SomeEnum { CONSTANT_ALPHA, CONSTANT_BETA, CONSTANT_DELTA; } /* Class 'Foo', this is my Foo objec

我需要根据Foo作为属性的枚举值,使用“Foo”对象对列表进行排序。我找到了“比较器”,我以前也用过。但我总是有一些整数/双属性,这对我来说更清楚

因为这个问题可能很模糊,我会制作一些匙形代码,这样你们就可以明白我的意思/想要什么。非常感谢

/* 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*/
/*枚举类*/
公共枚举SomeEnum{
常数α,常数β,常数δ;
}
/*类“Foo”,这是我的Foo对象*/
公开课Foo{
私有SomeEnum enum;/*每个“Foo”都有一个枚举类型*/
公共Foo(SomeEnum enum){
this.enum=enum;
}
public SomeEnum getEnum(){
返回Enon;
}
}
/*假设下面是某个控制器类*/
Foo alpha1=新的Foo(SomeEnum.CONSTANT_ALPHA);
Foo beta1=新的Foo(SomeEnum.CONSTANT_BETA);
Foo alpha2=新的Foo(SomeEnum.CONSTANT_ALPHA);
Foo delta1=新的Foo(SomeEnum.CONSTANT_DELTA);
Foo beta2=新的Foo(SomeEnum.CONSTANT_BETA);
列表=新的ArrayList();
列表。添加(字母1);
//列表。添加(beta1)等(所有这5个foo)
集合。排序(列表,一些不知道如何制作的比较);
System.out.println(list.toString());/*不知道如何正确打印列表对象,但想象一下我会打印列表的内容*/
/*清单的结果应为:*/
/*alpha1、alpha2、beta1、beta2、delta1*/
结论或结论;博士:

我需要使用相同的枚举类型对列表中的对象进行排序。我不需要在“delta”之前加上“alpha”。我只希望具有相同枚举值的Foo对象在列表中相邻

如果这没有道理,请一定要问


谢谢。

您只需比较
Foo

foos.sort(new Comparator<Foo>() {

    @Override
    public int compare(Foo o1, Foo o2) {
        //Add null check
        return  o1.getEnum().compareTo(o2.getEnum());
    }
});
foos.sort(新的比较器(){
@凌驾
公共整数比较(Foo o1,Foo o2){
//添加空检查
返回o1.getEnum().compareTo(o2.getEnum());
}
});

您只需比较
enum
元素的
Foo

foos.sort(new Comparator<Foo>() {

    @Override
    public int compare(Foo o1, Foo o2) {
        //Add null check
        return  o1.getEnum().compareTo(o2.getEnum());
    }
});
foos.sort(新的比较器(){
@凌驾
公共整数比较(Foo o1,Foo o2){
//添加空检查
返回o1.getEnum().compareTo(o2.getEnum());
}
});

无法正确测试代码,因此可能存在一些语法问题,但关键是:枚举实例是不同的整数,因此您可以仅通过它们来比较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);
}
Collections.sort(列表,新比较器(){
公共比较(Foo第一,Foo第二){
返回first.getEnum().comapareTo(second.getEnum());
}
});
对于(Foo项目:列表){
系统输出打印项次(项);
}
注意,这段代码假设getEnum()不会为列表中的任何实例返回null,并且您将为Foo实现toString()方法


编辑,是的,总是太晚。

无法正确测试代码,因此可能存在一些语法问题,但关键是:枚举实例是不同的整数,因此您可以仅通过它们来比较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);
}
Collections.sort(列表,新比较器(){
公共比较(Foo第一,Foo第二){
返回first.getEnum().comapareTo(second.getEnum());
}
});
对于(Foo项目:列表){
系统输出打印项次(项);
}
注意,这段代码假设getEnum()不会为列表中的任何实例返回null,并且您将为Foo实现toString()方法


编辑,是的,总是太晚。

您需要与基于整数对对象进行排序时完全相同的操作,除了比较一些枚举实例而不是比较整数。因为SomeEnum是可比较的,所以可以将它们与
someEnum1.compareTo(someEnum2)
进行比较。尝试一些方法。你需要与基于整数对对象排序时完全相同的方法,除了比较一些枚举实例而不是比较整数。因为SomeEnum是可比较的,所以可以将它们与
someEnum1.compareTo(someEnum2)
进行比较。试试看,保佑你的脸。谢谢保佑你的脸。谢谢迟做总比不做强,我感谢你的回复,非常感谢!迟做总比不做强,我感谢你的回复,非常感谢!