我如何按特定顺序订购数组? Java的

时间:2018-01-02 23:21:41

标签: java java-8

我有输入发送到我的数据库查询:

[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'
}, 
...]

将数据重新排序为原始顺序的高效方法是什么?

3 个答案:

答案 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;
        }
    }
}

`