【发布时间】:2018-07-26 07:20:24
【问题描述】:
这种排序保证稳定:相同的元素不会因为排序而被重新排序。
Collections.sort(gpsDtoList, new Comparator<T>() {
public int compare(T o1, T o2) {
return -o1.getEreigniszeit().compareTo(o2.getEreigniszeit());
}
});
知道这个事实,我怎么能象征这些项目确实是平等的,即使一个在列表中“更高”(隐含意思更年轻timestamp)
测试数据
假设o2.Ereigniszeit = 0000 和o2.Ereigniszeit = 0000 (这只是一个非常简单抽象的例子)
关键
我稍后会处理这些数据,并使用此逻辑在 Leaflet 地图上突出显示最新的 (green) 和最旧的 (red) 对象
if (i == 0) {
properties.put("markerStyle", LATEST);
} else if (i == gpsDtoList.size() - 1) {
properties.put("markerStyle", OLDEST);
}
但是它们实际上是equal,我应该如何正确处理它?
(我正在处理很多 gps 位置,所以任何 O(N^2) 都是不可接受的。)
返回对象是GpsDTO
public class GpsDTO implements Serializable {
....
public Date getEreigniszeit() {
return ereigniszeit;
}
public void setEreigniszeit(Date ereigniszeit) {
this.ereigniszeit = ereigniszeit;
}
【问题讨论】:
-
您能发布返回
getEreigniszeit()对象的类吗?您想通过哪些属性来订购这些对象?请说出他们的名字。 -
无论如何您都在提供自定义比较器,为什么不检查 compare() 中的附加字段以防 getEreigniszeit() 返回相等的值?
-
@Yoda by
ereigniszeit -
@user158037 这对我有什么帮助?最后一个项目在第一个之后,即使它是相等的,不是吗?
-
我会将它们放在
Map<GpsDTO, SortedSet<GpsDTO>>中,这样您就可以将它们分组,然后您可以在渲染时根据它们的日期或列表中的坐标数为它们应用颜色,但我不知道如何你想向用户表明他们的年龄(不知道你的 GUI),也许你会把他们放在一个列表中,因为他们在同一个地方,所以绝对不在地图上。
标签: java algorithm sorting collections comparator