java中基于参数的对象排序
我有一个java类SalesDataJson,如下所示。不同的状态值为“就绪”、“已拾取”和“已打包” SalesDataJson.javajava中基于参数的对象排序,java,list,sorting,Java,List,Sorting,我有一个java类SalesDataJson,如下所示。不同的状态值为“就绪”、“已拾取”和“已打包” SalesDataJson.java public class SalesDataJson { private Long salesOrderNumber; private String status; } 现在我想按照状态“就绪”、“拾取”和“打包”的顺序排列“SalesDataJson”对象。谁能帮我一下吗 我已完成以下代码,但它不起作用:- public voi
public class SalesDataJson {
private Long salesOrderNumber;
private String status;
}
现在我想按照状态“就绪”、“拾取”和“打包”的顺序排列“SalesDataJson”对象。谁能帮我一下吗
我已完成以下代码,但它不起作用:-
public void sort(){
Collections.sort(salesDataJsons, new Comparator<SalesDataJson>() {
@Override
public int compare(SalesDataJson o1, SalesDataJson o2) {
if (o1.getStatus() == PackagingStatus.RTW && o2.getStatus() == PackagingStatus.PICKED)
return -1;
else if (o1.getStatus() == PackagingStatus.PICKED && o2.getStatus() == PackagingStatus.RTW)
return 1;
else if (o1.getStatus() == PackagingStatus.RTW && o2.getStatus() == PackagingStatus.PACKED)
return -1;
else if (o1.getStatus() == PackagingStatus.PACKED && o2.getStatus() == PackagingStatus.RTW)
return 1;
else if (o1.getStatus() == PackagingStatus.PICKED && o2.getStatus() == PackagingStatus.PACKED)
return -1;
else if (o1.getStatus() == PackagingStatus.PACKED && o2.getStatus() == PackagingStatus.PICKED)
return 1;
return 0;
}
});
}
public void sort(){
sort(salesDataJsons,newcomparator(){
@凌驾
公共int比较(SalesDataJson o1、SalesDataJson o2){
如果(o1.getStatus()==PackagingStatus.RTW&&o2.getStatus()==PackagingStatus.PICKED)
返回-1;
else if(o1.getStatus()==PackagingStatus.PICKED&&o2.getStatus()==PackagingStatus.RTW)
返回1;
else if(o1.getStatus()==PackagingStatus.RTW&&o2.getStatus()==PackagingStatus.PACKED)
返回-1;
else if(o1.getStatus()==PackagingStatus.package&&o2.getStatus()==PackagingStatus.RTW)
返回1;
else if(o1.getStatus()==PackagingStatus.PICKED&&o2.getStatus()==PackagingStatus.PACKED)
返回-1;
else if(o1.getStatus()==PackagingStatus.packeted&&o2.getStatus()==PackagingStatus.PICKED)
返回1;
返回0;
}
});
}
如果您的包装状态
枚举是这样定义的(按您喜欢的方式排序):
您可以只使用ordinal()
,它返回枚举中的位置
public void sort(){
Collections.sort(salesDataJsons, new Comparator<SalesDataJson>() {
@Override
public int compare(SalesDataJson o1, SalesDataJson o2) {
return (o1.getStatus().ordinal() - o2.getStatus().ordinal());
}
});
}
然后,排序
变为:
public void sort(){
Collections.sort(salesDataJsons, new Comparator<SalesDataJson>() {
@Override
public int compare(SalesDataJson o1, SalesDataJson o2) {
return (o1.getStatus().getPosition() - o2.getStatus().getPosition());
}
});
}
创建如下所示的帮助器方法:
int getSortOrder(String status) {
switch(status) {
case PackagingStatus.RTW: 1; break;
case PackagingStatus.PICKED: 2; break;
case PackagingStatus.PACKED: 3; break;
default:
throw new RuntimeException("Unknown status" + status);
}
}
那你就可以了
new Comparator<SalesDataJson>() {
@Override
public int compare(SalesDataJson o1, SalesDataJson o2) {
return Integer.compare(getSortOrder(o1.getStatus), getSortOrder(o2.getStatus)));
}
}
新比较器(){
@凌驾
公共int比较(SalesDataJson o1、SalesDataJson o2){
返回整数.compare(getSortOrder(o1.getStatus),getSortOrder(o2.getStatus));
}
}
您只需按照自己喜欢的顺序排列状态
这样,您的排序就很容易了,如下所示:
List<SalesDataJson> sortedList = orignalList.stream()
.sorted(Comparator.comparing(SalesDataJson::getStatus))
.collect(Collectors.toList());
List sortedList=orignalList.stream()
.sorted(Comparator.comparing(SalesDataJson::getStatus))
.collect(Collectors.toList());
int getSortOrder(String status) {
switch(status) {
case PackagingStatus.RTW: 1; break;
case PackagingStatus.PICKED: 2; break;
case PackagingStatus.PACKED: 3; break;
default:
throw new RuntimeException("Unknown status" + status);
}
}
new Comparator<SalesDataJson>() {
@Override
public int compare(SalesDataJson o1, SalesDataJson o2) {
return Integer.compare(getSortOrder(o1.getStatus), getSortOrder(o2.getStatus)));
}
}
List<SalesDataJson> sortedList = orignalList.stream()
.sorted(Comparator.comparing(SalesDataJson::getStatus))
.collect(Collectors.toList());