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

java中如何基于多字段值对列表进行排序

java中如何基于多字段值对列表进行排序,java,collections,Java,Collections,我有EventCustomDTO的对象类型列表。在这个DTO中有许多字段。我想根据它们的值进行排序 我想要基于这三个字段值的排序列表。 1.passport=true,2.featured=true,取消和未确认状态添加到列表的最后一个 @ToString @AllArgsConstructor @NoArgsConstructor @Data public class EventCustomDTO { private Long id; private String ev

我有EventCustomDTO的对象类型列表。在这个DTO中有许多字段。我想根据它们的值进行排序

我想要基于这三个字段值的排序列表。 1.passport=true,2.featured=true,取消和未确认状态添加到列表的最后一个

@ToString
@AllArgsConstructor
@NoArgsConstructor
@Data
public class EventCustomDTO {
      private Long id;
      private String eventName;
      private Boolean passport;
      private Boolean featured;
      private String status;
}
1.我试过下面的代码

Lisi<EventCustomDTO> list = eventRepo.getAllEvents();

list.sort(Comparator.comparing(EventCustomDTO::getPassport).reversed()
.thenComparing(EventCustomDTO::getFeatured)
.thenComparing(EventCustomDTO::getEventStatus));

Lisi list=eventRepo.getAllEvents();
list.sort(Comparator.comparing(EventCustomDTO::getPassport).reversed()
.Then比较(EventCustomDTO::getFeatured)
.Then比较(EventCustomDTO::getEventStatus));

但它不符合我的要求。所以谁都知道。如何根据属性值对数据列表进行排序。

然后比较的
用于嵌套排序:当存在值相等的对象时,它们将按下一个属性进行内部排序

您显然想要定义自己完全独立的排序顺序:

list.sort(Comparator.comparating(o->{
if(Boolean.TRUE.equals(o.getPassport()){
返回1;
}else if(Boolean.FALSE.equals(o.getFeatured()){
返回2;
}else if(“取消”。等于(o.getStatus()){
返回3;
}否则如果(“未确认”。等于(o.getStatus()){
返回4;
}否则{
返回5;
}
}));

您可以让
eventcustomdt
实现
compariable
,并根据所需字段实现您自己的逻辑

@ToString
@AllArgsConstructor
@NoArgsConstructor
@Data
public class EventCustomDTO implements Comparable<EventCustomDTO>{
    private Long id;
    private String eventName;
    private Boolean passport;
    private Boolean featured;
    private String status;

    @Override
    public int compareTo(EventCustomDTO o) {
        return 0;
    }
}
@ToString
@AllArgsConstructor
@诺尔格构装师
@资料
公共类EventCustomDTO实现可比较的{
私人长id;
私有字符串eventName;
私人护照;
私有布尔特征;
私有字符串状态;
@凌驾
public int compareTo(EventCustomDTO){
返回0;
}
}
如果对象排序在参数对象前面,则可以返回负值

Collections.sort(list, (e1, e2) -> {
    if (e1.getPassport() != e2.getPassport()) {
        return e1.getPassport() ? -1 : 1;
    }

    if (e1.getFeatured() != e2.getFeatured()) {
        return e1.getFeatured() ? -1 : 1;
    }

    if (e1.getEventStatus() != e2.getEventStatus()) {
        // Or do you mean the other way around for this one?
        // Then it would be return e1.getEventStatus() ? 1 : -1;
        return e1.getEventStatus() ? -1 : 1;
    }

    return 0;
});

你的意思是这样吗?

这能回答你的问题吗?