Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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_List_Sorting - Fatal编程技术网

java中基于参数的对象排序

java中基于参数的对象排序,java,list,sorting,Java,List,Sorting,我有一个java类SalesDataJson,如下所示。不同的状态值为“就绪”、“已拾取”和“已打包” SalesDataJson.java public class SalesDataJson { private Long salesOrderNumber; private String status; } 现在我想按照状态“就绪”、“拾取”和“打包”的顺序排列“SalesDataJson”对象。谁能帮我一下吗 我已完成以下代码,但它不起作用:- public voi

我有一个java类SalesDataJson,如下所示。不同的状态值为“就绪”、“已拾取”和“已打包”

SalesDataJson.java

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());