1

プロジェクトにJDK 1.7を使用しています。ハドルに出会いました。価格 (10 進数) と製品名 (文字列) の 2 つのプロパティを持つオブジェクトの ArrayList があります。最初に価格で、次に製品名で ArrayList を並べ替える必要があります。Java コンパレータを使用しようとしましたが、1 つのプロパティでしか並べ替えることができません。これが私のコードです:

private static class PriceComparator implements Comparator<Product>{
 @Override
 public int compare(Product p1, Product p2) {
    return (p1.getPrice() > p2.getPrice() ) ? -1: (p1.getPrice() < p2.getPrice()) ?   
  1:0 ;
 }

}

このコードは価格のみをソートし、名前はソートしません。

あなたの助けと例に感謝します。

ありがとうイッシュ

4

1 に答える 1

3

Apache Commonsライブラリを使用してもかまわない場合は、 CommonsLangにCompareToBuilderがあります。複数のフィールドを簡単に比較するために使用できます。プリミティブは自動的に処理されますが、各フィールドにオプションのカスタムコンパレータを渡すこともできます。

public class Product implements Comparable<Product> {
    private float price;
    private String name;
    ...
    @Override
    public int compareTo(Product other) {
        return new CompareToBuilder()
            .append(getPrice(), other.getPrice())
            .append(getName(), other.getName())
            .toComparison();
    }
    ...
}

次に、リストでCollections.sort()を呼び出します。

List<Product> products = new ArrayList<Product>();
products.add(new Product("Adam's Product", 10.0))
products.add(new Product("Charlie's Product", 8.0))
products.add(new Product("Bob's Product", 8.0))
Collections.sort(products)

これらは次のように注文されます。

  1. ボブの製品
  2. チャーリーの製品
  3. アダムの製品
于 2013-03-22T12:56:16.447 に答える