欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

java动态字段排序_JAVA 列表动态增加字段显示和任意字段排序

发布时间:2025/4/16 编程问答 33 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java动态字段排序_JAVA 列表动态增加字段显示和任意字段排序 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

需求是用户可以在页面管理展示的字段,并且对字段的展示顺序自定义排序,控制所有字段显示隐藏,表中有默认基础字段是不可以删除的

这边全部都是后端实现:

思路:

数据表设定一个字段专门存放动态字段,字段内容以JSON的格式k-v形式存放

建立字段管理表,设置code码,名称,排序

查询接口将对象根据字段顺序转换成map返回

伪代码:

字段管理

public class StaffManager implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer id;

@Column(name = "name", length = 32)

private String name;

@ApiParam(value = "排序")

private Integer sorts;

@ApiParam(value = "代表字段")

private String code;

@ApiParam(value = "是否展示")

private Boolean isShow;

}

@ApiParam(value = "自定义字段")

private String customFields;

/**

* 定义字段

*

* @param content [{"name":"xx", "sorts":"", "code":"name", "isShow":"true"}...]

*/

public void update(String content) {

//清空数据表

dao.truncate();

JSONArray array = JSONObject.parseArray(content);

for (int i = 0; i < array.size(); i++) {

StaffManager staffManager = JSONObject.toJavaObject((JSONObject)array.get(i), StaffManager.class);

if (StringUtil.isEmpty(staffManager.getCode())) {

//设置扩展字段的名称

staffManager.setCode("extend_" + UUIDUtil.getCode());

}

staffManager.setSorts(i);

//保存对象。。。

}

}

/**

* 新增用户

*

* @param content 扩展字段 [{"code":"xx", "value":""}]

* extend

*/

public void insert(Integer id, String name, String tel, Integer classId,

Integer deptId, String tagCode, String content) {

if (StringUtil.isNotEmpty(content)){

JSONArray array = JSONObject.parseArray(content);

List> list = Lists.newArrayList();

for (Object o : array) {

Mapreq = JSONObject.toJavaObject((JSONObject)o, Map.class);

req.forEach((k,v)->{

//判断是否存在该字段

StaffManager manager = dao.findByCode(k);

if (manager != null){

list.add(req);

}

});

}

String s = JSON.toJSONString(list);

//保存列表对象。。。

}

}

最后查询排序结果

public MappageVagueStaff2(Integer num, Integer size, String content) {

//分页获取到列表对象。。。

Page= ...

List> list = Lists.newArrayList();

//设置对比集合表头 并排序

Listtitles = staffManagerService

.findAll()

.stream()

.sorted(Comparator.comparing(StaffManager::getSorts, Comparator.nullsLast(Integer::compareTo)))

.collect(Collectors.toList());

ListstaffList = staff.getContent();

staffList.forEach(x->{

MaphashMap = new LinkedHashMap<>(16);

//将原对象转换成Map

Mapmap = ...

//根据列表字段和顺序设置

titles.forEach(u->{

String code = u.getCode();

String substring = code;

if (code.contains(SPLIT)){

substring = code.substring(0, code.indexOf(SPLIT));

}

Object o = map.get(substring);

//根据顺序设置值

hashMap.put(substring, o);

});

//每个对象顺序重排后 设置扩展字段的值

String customFields = x.getCustomFields();

JSONArray array = JSONObject.parseArray(customFields);

if (array != null && array.size() > 0){

for (Object o : array) {

MapjsonMap = JSONObject.toJavaObject((JSONObject)o, Map.class);

//判断是否是是存在的字段

jsonMap.forEach((k,v)->{

if (hashMap.containsKey(k)){

hashMap.put(k, v);

}

});

}

}

list.add(hashMap);

});

Mapmap = Maps.newHashMap();

map.put("pageMax", staff.getTotalElements());

map.put("data", list);

map.put("title", titles);

return map;

}

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的java动态字段排序_JAVA 列表动态增加字段显示和任意字段排序的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。