list集合将集合中对象的指定属性的某个值,进行排序#
在工作中,往往会遇到这种情况,查出一个集合,返回给前端,一般情况顶多做个简单的分页就行。但是这时候产品经理告诉你,要将某一条数据置顶,也就是将集合中的对象的属性等于某个值放在集合的最前面。
- 方法一:最开始我是这么做的,建立一个与返回集合相同的中间集合,然后遍历一遍,将所需要的值,赋值给中间集合,然后再遍历一遍,将不需要的值赋值给中间集合,最后返回中间集合即可。但是这种方式有些不够优雅!
- 方法二:利用Comparator接口构造一个专门用于排序的类,实现Comparator接口。
例如:
package pattern.strategy.demo;
import jdk.nashorn.internal.objects.annotations.Getter;
import jdk.nashorn.internal.objects.annotations.Setter;
import java.util.Date;
/**
* @author : WangYong
* @Description: 集合中元素
* @date : 2022年11月19日 22:04
*/
public class ProjectDetail {
private String name;
private String id;
private String code;
private Date startTime;
public ProjectDetail() {
}
public ProjectDetail(String name, String id, String code) {
this.name = name;
this.id = id;
this.code = code;
}
@Override
public String toString() {
return "ProjectDetail{" +
"name='" + name + '\'' +
", id='" + id + '\'' +
", code='" + code + '\'' +
", startTime=" + startTime +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
}
这是返回的集合中的对象
package pattern.strategy.demo;
import java.util.Comparator;
/**
* @author : WangYong
* @Description: 实现Comparator接口 泛型指定为ProjectDetail
* @date : 2022年11月19日 22:08
*/
public class ProjectComparator implements Comparator<ProjectDetail> {
//实现排序方法
@Override
public int compare(ProjectDetail o1, ProjectDetail o2) {
//假设要将ProjectDetail对象中属性code等于code的对象排到最前面
if (o1.getCode().equals("code")) {
return -1;
}
if (o1.getCode().hashCode() < o2.getCode().hashCode()) {
return -1;
}
if (o1.getCode().hashCode() == o2.getCode().hashCode()) {
return 0;
} else {
return 0;
}
}
}
以上是实现Comparator接口的排序类
package pattern.strategy.demo;
import cn.hutool.core.collection.CollectionUtil;
import java.util.ArrayList;
import java.util.List;
/**
* @author : WangYong
* @Description:
* @date : 2022年11月19日 22:03
*/
public class TestSort {
public static void main(String[] args) {
List<ProjectDetail> list = new ArrayList<>();
ProjectDetail one = new ProjectDetail("项目一", "2", "cod234");
ProjectDetail two = new ProjectDetail("项目二", "52", "cod334");
ProjectDetail three = new ProjectDetail("项目三", "6", "cod2d4");
ProjectDetail four = new ProjectDetail("项目四", "23", "code4");
ProjectDetail five = new ProjectDetail("项目五", "5", "code");
list.add(one);
list.add(two);
list.add(three);
list.add(four);
list.add(five);
for (ProjectDetail projectDetail : list) {
System.out.println(projectDetail);
}
System.out.println("排序之后");
//利用集合工具,进行排序
CollectionUtil.sort(list, new ProjectComparator());
for (ProjectDetail projectDetail : list) {
System.out.println(projectDetail);
}
}
}
结果如下
ProjectDetail{name='项目一', id='2', code='cod234', startTime=null}
ProjectDetail{name='项目二', id='52', code='cod334', startTime=null}
ProjectDetail{name='项目三', id='6', code='cod2d4', startTime=null}
ProjectDetail{name='项目四', id='23', code='code4', startTime=null}
ProjectDetail{name='项目五', id='5', code='code', startTime=null}
排序之后
ProjectDetail{name='项目五', id='5', code='code', startTime=null}
ProjectDetail{name='项目一', id='2', code='cod234', startTime=null}
ProjectDetail{name='项目二', id='52', code='cod334', startTime=null}
ProjectDetail{name='项目三', id='6', code='cod2d4', startTime=null}
ProjectDetail{name='项目四', id='23', code='code4', startTime=null}
这样就优雅的解决了问题了.
emmm工作中还是需要善用工具,多多学习设计模式,才能写出优雅简洁的代码