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;
}
}
请参加,访问并阅读,以了解如何有效地使用此网站。阿尔索