【java】list根据元素字段进行优先级排序

时间:2024-04-04 18:22:33

【java】list根据元素字段进行优先级排序


一、问题说明

在做一个油田系统时遇到的需要根据优先级排序的问题
现有一个预算单的集合list,要根据历史单据做新的预算单据,但在做之前要查到之前的单据进行修改另存为新的单据,查询的过程是根据预算单的几个参数进行优先级排序查询,以便查询到最符合现在要求的历史单据作为修改模板。
预算单据实体:如下

@Column(name = "WELL_TYPE")
private String wellType;

@Column(name = "WELL_AREA")
private String wellArea;

@Column(name = "WELL_DIFF")
private String wellDiff;

@Column(name = "WELL_CASING")
private String wellCasing;

@Column(name = "WORK_TYPE")
private Integer wellDeep;

现在需要以这五个条件做优先度排序:
wellDiff>wellArea>wellType>wellCasing>workType

二、解决思路

1、引入优先级分数的概念:
预算实体中添加score字段:
根据优先级进行分数配置:
workType:1
wellCasing:2
wellType:4
wellArea:8
wellDiff:16
每个优先级的配分是所有相对低优先级的配分之和再加1,这样保证了高优先级字段符合查询条件时一定会比低优先级符合条件时的配分更高。
然后再根据配分排序。list的排序利用实体类实现Comparable接口来实现。

三、排序代码块

1、实体
继承接口
【java】list根据元素字段进行优先级排序
引入分数字段,不必存数据库
【java】list根据元素字段进行优先级排序
实现比较方法
分数降序排列:
【java】list根据元素字段进行优先级排序
分数升序排列:
【java】list根据元素字段进行优先级排序
2、排序
【java】list根据元素字段进行优先级排序