gpt4 book ai didi

java排序问题

转载 作者:行者123 更新时间:2023-11-30 09:39:35 26 4
gpt4 key购买 nike

我有一个 POJO 的数组列表,其中的数据是这样的

id    time
2 467
3 403
4 602
3 529
5 398

要求是首先我需要按时间对数据进行排序,然后相同的 ID 应该一个接一个地排列,即

id     time
5 398
3 403
3 529
2 467
4 602.

最初按时间排序,我使用以下逻辑

Collections.sort(list, new Comparator<Asset>() {
@Override
public int compare(Asset o1, Asset o2) {

if (o1.getTime() > o2.getTime())

return -1;

else if (o1.getTime() < o2.getTime())

return 1;

else

return 0;

}

});

谁能帮我在下一阶段按ID进行俱乐部?

最佳答案

要根据您提供的示例对数据进行排序,您可能需要遍历列表两次。 (否则您将如何确定 3 504 应该出现在 5 315 之前还是之后?)

  1. 按时间排序。
  2. 根据每个 id 的第一个索引对列表进行排序。

下面是一些示例代码:

import java.util.*;

class Asset {
public int id;
public int time;

public Asset(int id, int time) {
this.id = id;
this.time = time;
}

public String toString() {
return id + " " + time;
}
}


class Test {
public static void main(String[] args) {

List<Asset> assets = new ArrayList<Asset>();
assets.add(new Asset(2, 467));
assets.add(new Asset(3, 403));
assets.add(new Asset(4, 602));
assets.add(new Asset(3, 529));
assets.add(new Asset(5, 398));

// Sort according to time.
Collections.sort(assets, new Comparator<Asset>() {
@Override
public int compare(Asset o1, Asset o2) {
return new Integer(o1.time).compareTo(o2.time);
}
});

// Remember the original indexes of each asset.
final List<Asset> assetsCopy = new ArrayList<Asset>(assets);

// Sort the collection based on the index of the first asset
// with the same id
Collections.sort(assets, new Comparator<Asset>() {

private int firstIndexOf(int id) {
for (int i = 0; i < assetsCopy.size(); i++)
if (assetsCopy.get(i).id == id)
return i;
return -1;
}

@Override
public int compare(Asset o1, Asset o2) {
return new Integer(firstIndexOf(o1.id))
.compareTo(firstIndexOf(o2.id));
}
});


for (Asset a : assets)
System.out.println(a);
}
}

输出:

5  398
3 403
3 529
2 467
4 602

关于java排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9767103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com