gpt4 book ai didi

java - 按参数排序和对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:25 24 4
gpt4 key购买 nike

我有一个带有一些字符串参数的类。我从这个对象制作了一个实例列表。然后我做了一个比较器排序函数来按不同的主题对列表进行排序。例如通过 StartTime 或 EndTime。时间以字符串格式定义。这是排序的比较函数:

if (sortType == Sort.STARTTIME){
Collections.sort(routeList, new Comparator<Route>() {
@Override
public int compare(Route o1, Route o2) {
if (Double.parseDouble(o1.getTimeS()) >= (Double.parseDouble(o2.getTimeS())))
return 1;
else
return -1;
}
});
}

它可以工作,但是当我用 > 或 < 或 <= 符号更改比较器时,它将无法工作!或者当我将它们与 endTime 进行比较时,则仅适用于 <= 并且我无法按递增顺序对其进行排序!!!!即使我无法更改 ot 1 和 -1 的位置。

if (sortType == Sort.ENDTIME){
Collections.sort(routeList, new Comparator<Route>() {
@Override
public int compare(Route o1, Route o2) {
if ((Double.parseDouble(o1.getTimeE()) <= Double.parseDouble(o2.getTimeE()))))
return 1;
else
return -1;
}
});
}

我真的不知道这是怎么回事!!!!!!!!!

public class Route extends Arc {
private String type;
private int secId;
private String tId;
private int event;
private String name;
private String nameS;
}
private String nameE;
private String timeS;
private String timeE;
.....
}

还有几行数据

57779.99999999998557779.99999999995657778.99999999998557778.9999999999457778.9999999999357778.9999999998857777.057777.057750.057749.9999999999457734.9999999999457734.9999999998857719.99999999998557719.999999999985

最佳答案

您对comparators的理解是错误的

当条件相等时,它们应该返回 -1、1 和 0。因此,您当前使用 <= 进行比较并返回 -1 或 1 是不正确的。

相反,您必须实现这样的逻辑:

比较其两个参数的顺序。当第一个参数小于、等于或大于第二个参数时,返回负整数、零或正整数。

换句话说:您的第一个实现可能适用于您测试的数据;但这是不正确的;并且颠倒逻辑并不能解决这个问题。

最后:简单的答案在这里;只需使用 Double.compare()在你的比较器中。因为比较 float 实际上是一件棘手的事情。

关于java - 按参数排序和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40555309/

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