java中如何基于多字段值对列表进行排序
我有EventCustomDTO的对象类型列表。在这个DTO中有许多字段。我想根据它们的值进行排序 我想要基于这三个字段值的排序列表。 1.passport=true,2.featured=true,取消和未确认状态添加到列表的最后一个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
@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;
});
你的意思是这样吗?这能回答你的问题吗?