前几日接了一个需求,是对接第三方数据以树的形式展现,但是没有层级区分只有对应的父ID。但是甲方提供的数据实在坑人,没有层级,就连数据都是乱七八糟。本来有三种方式实现,想采用信任的方式觉得他们的数据不会变,谁想到做了一套最后还是变了。所以只能采用查询父级节点是否存在,然后来设定层级字段。
因为数据乱七八糟,子集在父级的上面,所以会造成父级没有插入进去,系统把子集当作为父级插入。
所以想到了冒泡排序。因为我的数据格式是JSON,不能直接进行排序。 我想到了两种方式实现:
1. 直接json.getString进行比较
2. 把json转为对象
我采用的是对象方式。话不多说直接上代码。
// 冒泡排序把数据整理好(数据错乱会导致层级措乱)
List<FolderDIO> list = JSONObject.parseArray(json.toJSONString(), FolderDIO.class);
for (int i = 0; i < list.size() - 1; i++) {
for (int j = 1; j < list.size() - i; j++) {
FolderDIO folderDIO;
// 对唯一标识进行比较,层级有小到大
if ((list.get(j - 1).getIndocno()).compareTo(list.get(j).getIndocno()) > 0) {
folderDIO = list.get(j - 1);
list.set((j - 1), list.get(j));
list.set(j, folderDIO);
}
}
}
冒泡排序想必大家都知道不做解释了。
简单来说就是比较了唯一标识。
排序完的数据结构如下:
这样就保证了父级是一定比子级先插入。
上一下获取父级存在的代码:
如有不对的地方或者有更好的方式还请各位大佬们指教。