如何排序数组列表整数类型

时间:2016-04-13 10:36:18

标签: java android sorting android-studio arraylist

我有一个对象类Product,如下所示

public class Product {
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    int price;
    String id;
    String image;
}

我想以价格为基础对产品进行分类。 我的数组是

 List<Product> products=new ArrayList<>();

 for(int i=0;i<ja3.length();i++){
     JSONObject jsonObject=ja3.getJSONObject(i);
     Product product=new Product();
     product.setId(jsonObject.getString("product_id"));
     product.setImage("http://ezybzy.com/images/"+jsonObject.getString("product_id")+"/1.jpg");
     product.setPrice(jsonObject.getInt("product_SP"));
     product.setName(jsonObject.getString("product_name"));
     products.add(product)
 }

我做了

Collections.sort(products, new Comparator<Product>() {
    @Override
    public int compare(Product lhs, Product rhs) {
        return lhs.getPrice().compareTo(rhs.getPrice());
    }
})

但是问题是.compareTo(rhs.getPrice()部分是错误的。它不能使用compareTo方法。我希望我的arrayList按产品价格排序。价格是整数值。但当我将其更改为String类型时,我得到了CompareTo,但由于String类型,它仍然未被排序。请帮助我

6 个答案:

答案 0 :(得分:8)

Collections.sort(products, new Comparator< Product >() {
    @Override public int compare(Product p1, Product p2) {
        return p1.getPrice()- p2.getPrice(); // Ascending
    }
});

请注意,这是整数之间的比较,因此无需将其更改为String

答案 1 :(得分:2)

您可以在Model类中实现Comparable,如下所示 -

public class Product implements Comparable<Product> {
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    int price;
    String id;
    String image;

    @Override
    public int compareTo(Product another) {
        return getPrice() - another.getPrice();
    }
}

然后在使用排序的地方,您只能使用排序功能 -

Collections.sort(products);

答案 2 :(得分:1)

以下是您可以从比较功能

返回的三个
  • 0
  • 正例如
  • 否定例如-1

正值表示第一个对象(在这种情况下为p1)大于第二个对象(在这种情况下为p2),反之亦然。 0显示对象相等

因此,对于升序,您可以将比较重写为

Collections.sort(products, new Comparator< Product >() {
    @Override public int compare(Product p1, Product p2) {
        return p1.getPrice()- p2.getPrice(); // Ascending
    }
});

降序

Collections.sort(products, new Comparator< Product >() {
    @Override public int compare(Product p1, Product p2) {
        return p2.getPrice()- p1.getPrice(); // Descending
    }
});

答案 3 :(得分:0)

如果您使用int价格,则可以简单地减去价格,而不是使用CompareTo。如果你正在使用字符串,我会首先将它们解析为double(或者int,但double会对价格更有意义)Double.parseDouble(rhs.getPrice())然后将它们减去。

答案 4 :(得分:0)

对于compareTo,你必须使用一个对象,它不能用于int,如果你想让它工作,要么将它强制转换为Integer,要么只使用if条件进行比较。

答案 5 :(得分:-2)

在对象中实现Comparable接口。然后您可以使用Collections class sort方法,如下所示:

;