概述
需求:
根据身份的上下层级关系进行排序:
1、没有上级的排在前。
2、有上级的,按升序排列,即下级在前,上级在后。
实现:
建一个简单的身份类
/**
* @author chenqi
* @version V1.0
* @ClassName: identity
* @Description: 身份类
* @Date 2019/10/18 15:02
*/
@Data
public class identity implements Serializable {
private static final long serialVersionUID = 3403724365164506666L;
/** 身份id */
private Long id;
/** 身份上级id */
private Long parentId;
}
推荐使用lombok,可以省略get、set方法代码
实现代码:
public static void main(String[] args) {
List<identity> list = new ArrayList<>();
//i1的上级是i4
identity i1 = new identity();
i1.setId(1L);
i1.setParentId(4L);
//i2没有上级
identity i2 = new identity();
i2.setId(2L);
//i3的上级是i1
identity i3 = new identity();
i3.setId(3L);
i3.setParentId(1L);
//i4的上级是0 则i4是最高级
identity i4 = new identity();
i4.setId(4L);
i4.setParentId(0L);
//i5的上级是i4
identity i5 = new identity();
i5.setId(5L);
i5.setParentId(4L);
list.add(i1);
list.add(i2);
list.add(i3);
list.add(i4);
list.add(i5);
System.out.println("===排序前===");
list.stream().forEach(item -> {
System.out.println(item.getId());
});
Collections.sort(list, new Comparator<identity>() {
@Override
public int compare(identity i1, identity i2) {
if(i1 == i2){
return 0;
}else if(CheckUtils.objCheckNull(i1.getParentId())){
return -1;//上级id为空的排在前
}else if(i1.getParentId().intValue() == i2.getId().intValue()) {
return -1;//i1 的上级是 i2 则往前排
}else{
return 1;
}
}
});
System.out.println("===排序后===");
list.stream().forEach(item -> {
System.out.println(item.getId());
});
}
运行结果:
思路:
通过重写Comparator类的compare()方法进行自定义排序规则,该方法接收两个排序对象入参,如:i1和i2,返回int值。即当返回-1时,则i1在前,i2在后,反之,当返回1时,i1在后,i2在前。
至此,完成了对有上下关系层级的数据进行自定义规则排序。
如果该文章有帮助到您,就留言点个赞吧!您的支持与肯定是我持续更新最大的动力。
最后
以上就是秀丽雨为你收集整理的java根据身份层级自定义排序规则的全部内容,希望文章能够帮你解决java根据身份层级自定义排序规则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复