gpt4 book ai didi

java - 使用 compareTo 和 Collections.sort

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:51:01 27 4
gpt4 key购买 nike

我有一个特许经营类,其中包含所有者(特许经营权所有者的名称)、州(特许经营所在州的 2 个字符的字符串)和销售额(当天的总销售额)

public class Franchise implements Comparable <Franchise>  {
final String owner;
final String state;
final double sales;

protected Franchise(String owner, String state, double sales ) {
this.owner = owner;
this.state = state;
this.sales = sales;
}
public String toString() {
String str = state + ", " + sales + ", " + owner;
return str;
}
public String getState() {
return state;
}
public double getSales() {
return sales;
}
public int compareTo(Franchise that) {
double thatSales = that.getSales();
if (this.getState().compareTo(that.getState()) < 0)
return -1;
else if (this.getSales() > thatSales)
return -1;
else if (this.getSales() < thatSales)
return 1;
else
return 0;
}
}

compareTo 基于状态 ASCENDING 和销售额 DESCENDING

import java.util.ArrayList;
import java.util.Collections;

public class FranchiseTester {

public static void main(String[] args) {
ArrayList<Franchise> franchises = new ArrayList<Franchise>();
Franchise a = new Franchise("Andrew Luck", "IN", 1270.5);
Franchise b = new Franchise("Ray Rice", "MD", 1210);
Franchise c = new Franchise("Alfred Morris", "WA", 980.5);
Franchise d = new Franchise("Roddy White", "GA", 670);
Franchise e = new Franchise("Greg Olsen", "SC", 740);
Franchise f = new Franchise("T.Y. Hilton", "IN", 950);
Franchise g = new Franchise("Julio Jones", "GA", 560);

franchises.add(a);
franchises.add(b);
franchises.add(c);
franchises.add(d);
franchises.add(e);
franchises.add(f);
franchises.add(g);

Collections.sort(franchises);

for(int i = 0; i < franchises.size(); i++) {
System.out.print(franchises.get(i) + "\n");
}
}

}

当我在没有 Collections.sort 的情况下比较这些特许经营对象时,它们比较正确,但是当我像这里一样使用 Collections.sort 进行测试时,我得到如下输出这个:

GA, 670.0, Roddy White
GA, 560.0, Julio Jones
IN, 1270.5, Andrew Luck
IN, 950.0, T.Y. Hilton
MD, 1210.0, Ray Rice
SC, 740.0, Greg Olsen
WA, 980.5, Alfred Morris

各州的比较仍然正确,但它没有正确地按销售额进行比较(特定统计数据的较低销售额应该首先出现)

我认为默认情况下 .sort 比较字符串是状态仍然正确的原因,我的问题是我如何实现它以根据销售额进行比较?

最佳答案

在您的问题陈述中,您说的是“比较基于状态升序和销售降序”。基于此,您的结果是有效的。各州按升序排列,每个州的销售额按降序排列。在接下来的声明中,您要说的是(特定统计数据的较低销售额应该放在第一位)。所以基本上你有两个相互矛盾的要求。两者不能同时进行。

换句话说,您是否希望您的程序执行其他操作,例如两者都应该升序或降序或其他顺序。如果是,那么您必须相应地修改您的 compareTo 方法。

关于java - 使用 compareTo 和 Collections.sort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18754490/

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