1

我正在为我的项目使用 JDK 1.7。我遇到了Huddle。我有一个对象的 ArrayList,它有两个属性:价格(十进制)和产品名称(字符串)。我需要先按价格然后按产品名称对 ArrayList 进行排序。我尝试使用 Java 比较器,但我只能按一个属性排序。这是我的代码:

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 库,Commons Lang 有一个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 回答