【list集合将指定的对象字段 按照特定的值进行排序】

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工作中还是需要善用工具,多多学习设计模式,才能写出优雅简洁的代码

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值