2017-04-13 7 views
0

Ich bekomme einen Nullzeiger, bin mit den Vergleichsmethoden nicht vertraut und versuche herauszufinden, wo ich falsch liege. Die Idee ist, nach der Anzahl der verkauften Produkte zu sortieren und dann die Top 5 Produkte zu verkaufen. Es gibt einen NullPointer zurück, sobald ich die Vergleichsmethoden implementiert habe.Liste nach Objekt sortieren

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; 
} 

Mein Getter wurde Rückkehr für einige Elemente null, die noch einen Kauf haben haben, so musste ich einfach einen Scheck für null hinzufügen und alles funktioniert.

+0

können Sie das Fehlerprotokoll buchen? –

+0

auch, was soll das tun -> Product.findAll (""); ? –

+0

es gibt auch einen Fehler in Ihrem Vergleich, der else wenn soll sein -> sonst if (p1.getCopiesSold()

Antwort

1

Überprüfen Sie Ihre Methode findAll(). Es scheint, dass es eine Liste gibt, in der einige Werte den Wert Null haben. Wenn Ihre Vergleichsmethode durch den von Collections verwendeten Sortieralgorithmus aufgerufen wird, ergibtoder p2.getCopiesSold einen Fehler, weil p1 oder p2 null ist.

Es ist auch möglich, dass die Methode findAll() null zurückgibt und keine List, oder dass die Methode getCopiesSold null zurückgibt.

In Java kann etwas den Wert null haben, ohne eine Ausnahme auszulösen, es löst nur eine Ausnahme aus, wenn Sie versuchen, eine Methode aufzurufen oder eine Operation mit ihr durchzuführen. Aus diesem Grund kann die Nullvariable eine der Variablen sein, die von der Zeile verwendet werden, die den Fehler verursacht.

+0

Danke, ich habe das innerhalb des Getter behoben, aber es gibt mir nicht die Top-5-Produkte verkauft. Ich möchte die Reihenfolge der Liste umkehren. – Lee

+0

@OusmaneMahyDiaw Ich habe es gerade aktualisiert, das war das Problem, aber ich möchte die Reihenfolge der Liste umkehren, ich schaute auf die umgekehrte API-Aufruf. Ist es ähnlich? – Lee

+0

@Lee verwenden Collections.Reverse() Methode –

Verwandte Themen