我如何按特定顺序订购数组? Java [关闭]

问题描述 投票:-3回答:3

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

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

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

java java-8
3个回答
1
投票

构造从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));

然后使用此比较器对列表进行排序。


0
投票

我从你的帖子中了解到,你的主要问题是获得所需顺序的高效方法,并假设你正在处理大规模数据,我会映射 - 使用HashMap以获得最佳性能 - [25,1381,34,...]的每个元素的值都是一个'计数器',在您的请求ID每次迭代时递增,然后使用此映射在排序时比较不同的记录。


0
投票

如果我弄错了,请纠正我,但是以相同顺序返回数据的方法可能是创建一个数组,如果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;
        }
    }
}

`

© www.soinside.com 2019 - 2024. All rights reserved.