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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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_Data Structures_Collections_Comparable - Fatal编程技术网

Java 排序列表<;对象>;按从枚举中获取的值自定义排序

Java 排序列表<;对象>;按从枚举中获取的值自定义排序,java,sorting,data-structures,collections,comparable,Java,Sorting,Data Structures,Collections,Comparable,我的课程如下: public class Status implements Serializable, Comparable<Status>{ private int requestStatus; @Column(name = "STATUS") public int getStatus() { return status; } public void setStatus(int status) {

我的课程如下:

public class Status implements Serializable, Comparable<Status>{
    private int requestStatus;

    @Column(name = "STATUS")
    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }
}
public enum StatusEnum {
    REQUESTED(0), CANCELED(-1), VALIDATED(10), ONGOING(20), FINISHED(30);

    private int intValue;

    private StatusEnum (int intValue) {
        this.intValue = intValue;
    }

    public int getIntValue() {
        return intValue;
    }

    public void setIntValue(int intValue) {
        this.intValue = intValue;
    }

    public String getName() {
        return this.name();
    }

    public static StatusEnum getStatusFromEnum(int code) {
        for (StatusEnum status : StatusEnum.values()) {
            if (status.getIntValue() == code) {
                return status;
            }
        }
        return null;
    }

    public static StatusEnum getStatusFromString(String name) {
        for (StatusEnum status : StatusEnum .values()) {
            if (status.name().equalsIgnoreCase(name)) {
                return status;
            }
        }
        return null;
    }
因此,我愿意按照自定义顺序对该列表进行排序,以便在web部件上显示,以便进一步执行某些操作。我要的订单如下:

public class Status implements Serializable, Comparable<Status>{
    private int requestStatus;

    @Column(name = "STATUS")
    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }
}
public enum StatusEnum {
    REQUESTED(0), CANCELED(-1), VALIDATED(10), ONGOING(20), FINISHED(30);

    private int intValue;

    private StatusEnum (int intValue) {
        this.intValue = intValue;
    }

    public int getIntValue() {
        return intValue;
    }

    public void setIntValue(int intValue) {
        this.intValue = intValue;
    }

    public String getName() {
        return this.name();
    }

    public static StatusEnum getStatusFromEnum(int code) {
        for (StatusEnum status : StatusEnum.values()) {
            if (status.getIntValue() == code) {
                return status;
            }
        }
        return null;
    }

    public static StatusEnum getStatusFromString(String name) {
        for (StatusEnum status : StatusEnum .values()) {
            if (status.name().equalsIgnoreCase(name)) {
                return status;
            }
        }
        return null;
    }
1:请求的(0)2:已验证的(10)3:正在进行的(20)4:已完成的(30)5: 已取消(-1)

有人能帮我用排序代码来排列这个
列表状态
对象吗?如果有人可以按照上面提到的顺序对其进行排序,以便在web端上显示它,这将是非常有帮助的


提前感谢

使用自定义比较器实现这一点非常简单,然后可以将其传递给Arrays.sort()或任何集合的sort()。
鉴于您不希望这些值按照intValue按升序排序,您可以向StatusEnum添加一个附加字段(例如int sortPriority),其中较低的值将首先排序

Comparator.comparingInt(status -> status.sortPriority));

我想您需要的是
public int compareTo(Status o)
的实现功能,排序方法是:

当值大于0时,从最小到最大排序,当值小于0时,将其放在列表的末尾。

以下是实现的功能:

@Override
public int compareTo(Status o) {
    //all >=0, sort by value 
    if (status >= 0 && o.status >= 0) {
        return Integer.compare(status, o.status);
    }
    // all <=0, equals
    if (status < 0 && o.status < 0) {
        return 0;
    }
    //one >=0, the other one <0, put the <0 value to the end of the list
    if (status < 0) {
        return 1;
    } else {
        return -1;
    }
}
请参加,访问并阅读,以了解如何有效地使用此网站。阿尔索