2016-09-11 7 views
0

私はProductというクラスがあり、フィールドはpriceweightです。2つのパラメータでJava Listをソートしますか?

私の最終的な目的は、私は私がProduct implements Comparable<Product>を作ることができます知っている価格や重量

で並べ替えることができます製品のリストを持っていることです。それは私が、たとえば、する必要がありますを意味します

@Override 
public int compareTo(Product compareProduct) { 
    int comparePrice = ((Product) compareProduct).getPrice(); 

    //ascending order 
    return this.price - comparePrice; 
} 

このコードは、価格だけで比較されますので、一言で言えば、問題は、私は、私が使用する比較方法を選択することができますどのようにのですか? (byPriceまたはbyWeight)

+1

を何それをしません価格または重量でソートすることを意味しますか?あなたは価格でソートしたい、等しい価格では、重量でソートしたいですか? – Tunaki

+0

私はちょうどしたい:A)価格で分類されたすべての製品のリストを取得するB)すべての製品を重量でソートする。今は明らかですか?ご注意いただきありがとうございますbtw –

+0

'私は使用したい比較方法を選択できますか?'カスタム[コンパレータ](https://docs.oracle.com/javase/7/docs/api/java/util/Comparator .html) – copeg

答えて

3

Collections.sort()を実行しているときは、パラメータとして使用するComparatorを実装するクラスを作ることができる。そして、

static class PriceComparator implements Comparator<Product> { 
    public int compare(Product p1, Product p2) 
    { 
     return p1.getPrice().compareTo(p2.getPrice()); 
    } 
} 

static class WeightComparator implements Comparator<Product> { 
    public int compare(Product p1, Product p2) 
    { 
     return p1.getWeight().compareTo(p2.getWeight()); 
    } 
} 

とを並べ替え、あなたが望む方のコンパレータによって:

Collections.sort(productList, new PriceComparator()); 
... 
Collections.sort(productList, new WeightComparator()); 
関連する問題