我有输入发送到我的数据库查询:
[25,1381,34, ...]
然后从查询返回我的数据,但db已更改返回的顺序。
[{
id: 1381,
name: 'Test'
}, {
id: 25,
name: 'Another test'
}, {
id: 34,
name: 'One last test'
},
...]
我想重新排序数据并按照id的发送顺序返回调用者。即:
[{
id: 25,
name: 'Another test'
}, {
id: 1381,
name: 'Test'
}, {
id: 34,
name: 'One last test'
},
...]
将数据重新排序为原始顺序的高效方法是什么?
构造从ID到输入中位置的映射:
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < ids.length; ++i) {
map.put(ids[i], i);
}
现在,构建一个基于此映射进行排序的Comparator<YourObject>
:
Comparator<YourObject> cmp = Comparator.comparing(yo -> map.get(yo.id));
然后使用此比较器对列表进行排序。
我从你的帖子中了解到,你的主要问题是获得所需顺序的高效方法,并假设你正在处理大规模数据,我会映射 - 使用HashMap以获得最佳性能 - [25,1381,34,...]
的每个元素的值都是一个'计数器',在您的请求ID每次迭代时递增,然后使用此映射在排序时比较不同的记录。
如果我弄错了,请纠正我,但是以相同顺序返回数据的方法可能是创建一个数组,如果inputdb存储为集合,则存储输入顺序int order[] = new int[inputdb.size()];
。然后,保存ID。即:
for(int i = 0; i < inputdb.lengh; i++){
order[i] = inputdb.get(i).getId();
}
最后,当数据从db运行时运行比较器或自己创建它:
for(int k = 0; k < inputdb.size(); k++){
for(int j = 0; j < inputdb.size(); j++){
if(order[k] == inputdb.get(j).getId()){
inputdb.set(j,inputdb.get(j);
break;
}
}
}
`