我有输入发送到我的数据库查询:
[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'
},
...]
将数据重新排序为原始顺序的高效方法是什么?
答案 0 :(得分:1)
构造从ID到输入中位置的映射:
[25,1381,34,...]
现在,构建一个基于此地图排序的Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < ids.length; ++i) {
map.put(ids[i], i);
}
:
Comparator<YourObject>
然后使用此比较器对列表进行排序。
答案 1 :(得分:0)
我从你的帖子中了解到,你的主要问题是获得所需顺序的高效方法,并假设你正在处理大规模数据,我会映射 - 使用HashMap以获得最佳性能 - {{的每个元素1}}带有'counter'的值,在你的请求id每次迭代时递增,然后使用这个映射来比较排序时的不同记录。
答案 2 :(得分:0)
如果我弄错了,请纠正我,但是以相同顺序返回数据的方法可能是创建一个数组,如果inputdb存储为集合,则存储输入顺序int order[] = new int[inputdb.size()];
。
然后,保存ID。即:
for(int i = 0; i < inputdb.lengh; i++){
order[i] = inputdb.get(i).getId();
}
最后,当数据从数据库中运出比较器或自己创建时:
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;
}
}
}
`