gpt4 book ai didi

java - 按对象字段对列表进行排序

转载 作者:行者123 更新时间:2023-12-02 13:25:50 26 4
gpt4 key购买 nike

我得到一个空指针,不熟悉比较方法并试图找出哪里出错了。我的想法是按照销售的产品数量进行排序,然后获得销售量排名前 5 的产品。一旦我实现比较方法,它就会返回一个 NullPointer。

public Result index() {
// Get list of all categories in ascending order
String name = "Best Sellers";
List<Category> categoriesList = Category.findAll();
List<Product> productsList;
Long cat = new Long("11");
productsList = bestSellers();

return ok(index.render(env, categoriesList, productsList, cat, "", getCurrentUser(), name));
}


public List<Product> bestSellers(){
List<Product> temp = Product.findAll("");
Collections.sort(temp, new Comparator<Product>() {
@Override
public int compare(Product p1, Product p2) {
if(p1.getCopiesSold()>p2.getCopiesSold()){
return 1;
} else if(p1.getCopiesSold()<p2.getCopiesSold()){
return -1;
}
return 0;
}
});

List<Product> bestSellers = new ArrayList<>();
for(int i=0; i<5; i++){
bestSellers.add(temp.get(i));
}
return bestSellers;
}

对于某些尚未购买的商品,我的 getter 返回 null,因此我只需添加对 null 的检查,一切正常。

public Integer getCopiesSold() {
if(copiesSold==null){
copiesSold = 0;
}
return copiesSold;
}

最佳答案

检查您的方法findAll()。它似乎给出了一个列表,其中某些值的值为空。当 Collections 使用的排序算法调用比较方法时,p1.getCopiesSoldp2.getCopiesSold 会给出错误,因为 p1 或 p2 是无效的。

也有可能方法 findAll() 返回 null 而不是 List,或者方法 getCopiesSold 返回 null .

在 java 中,某些东西可以具有 null 值而不引发异常,只有当您尝试调用方法或使用它执行操作时,它才会引发异常。因此,空变量可以是引发错误的行所使用的任何变量。

关于java - 按对象字段对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43381510/

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