我有一个 Location 对象的数组列表,我想找到它的最大值和最小值。但是,当调用 collections.max(listN, PopulationComparator) 时,它给出最小值,而对于 collection.min() ,它返回最大值。一旦将顺序更改为降序,问题就解决了,但我不明白为什么这很重要。
static class PopulationComparator implements Comparator <Location>{
public int compare(Location a, Location b){
// ascending order
if(a.getPop() > b.getPop()){
return 1;
}else if(a.getPop() < b.getPop()){
return -1;
}else{
return 0;
}
}
}
public static void main(String[] args){
Location maxPopulation = Collections.max(listN, new PopulationComparator());
}
看起来您的代码是正确的,并且能够返回最小和最大填充区域。
我假设有一个名为
Location
的类,其属性名为 population
,该属性通过 getPop()
方法返回,如下所示。
static class Location {
private int population;
Location(int population) {
this.population = population;
}
public int getPop() {
return population;
}
}
现在,如果我们创建一个包含一组
Location
的列表,那么 max
和 min
方法都可以正常工作。
public static void main(String[] args){
Collection<Location> listN = new ArrayList<>();
listN.add(new Location(300));
listN.add(new Location(1));
listN.add(new Location(20));
listN.add(new Location(600000));
listN.add(new Location(4000));
listN.add(new Location(50000));
Location maxArea = Collections.max(listN, new PopulationComparator());
System.out.println("Max " + maxArea.getPop());
Location minArea = Collections.min(listN, new PopulationComparator());
System.out.println("Min " + minArea.getPop());
}
该程序的输出如下。
Max 600000
Min 1
您在哪里遇到问题?