2017-04-13 3 views
0

私はNULLポインタを取得しています。メソッドの比較方法を理解しておらず、どこが間違っているのか把握しようとしています。アイデアは、私が販売した製品の数で並べ替え、上位5製品を販売することです。私はcompareメソッドを実装すると、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; 
} 

は私のゲッターは、私はちょうどヌルのチェックを追加する必要がありましたし、すべてが正常に動作しますので、購入を持つようには至っていないいくつかの項目にnullを返していました。

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

エラーログを投稿できますか? –

+0

また、これは何を意味するのですか?> Product.findAll( ""); ? –

+0

あなたの比較にも間違いがあります。else ifは - > else if(p1.getCopiesSold()

答えて

1

findAll()を確認してください。それは、いくつかの値がnullの値を持つリストを与えているようです。 Collectionsで使用されるソートアルゴリズムによってcompareメソッドが呼び出された場合、p1またはp2がnullであるため、p1.getCopiesSoldまたはp2.getCopiesSoldにエラーが発生します。

findAll()がnullを返し、Listを返していないか、またはgetCopiesSoldメソッドがnullを返す可能性もあります。

Javaでは、例外をスローせずにnullの値を持つことができます。メソッドを呼び出すか、操作を実行しようとすると例外がスローされます。このため、NULL変数は、エラーを投げている行で使用されている変数のいずれかになります。

+0

ありがとう、私はゲッター内でこれを修正しましたが、それは私にトップ5の製品を販売していません。私はリストの順序を逆にしたいですか? – Lee

+0

@OusmaneMahyDiaw私はそれを更新しましたが、それは問題でしたが、私はリストの順序を逆にしたい、私は逆API呼び出しを見ていた。それは似ていますか? – Lee

+0

@Leeee Collections.Reverse()メソッドを使用する –

関連する問題