1

我从 Java 开始,我的问题是我有一个对象的 Arraylist(“Articulos”,表示文章),并且这个对象具有属性(如名称、价格等)。我想按每个对象的价格对 Arraylist 进行排序。这是我尝试过的。

首先,我手动填充 Arraylist:

public static void Introducir_Articulo(){
    Articulo a=new Articulo();

    System.out.println("Codigo del articulo: "+(art.size()+1));
    if(a.codArt==0){
        a.codArt++;
    } else {
        a.codArt+=art.size();
    }
    System.out.println("Nombre del articulo: ");
    a.NombreArt=sc.next();

    System.out.println("Precio del articulo: ");
    a.precio=sc.nextInt();

    System.out.println("IVA del articulo: ");
    a.iva=sc.nextInt();

    art.add(a);
}

后来,我尝试了这个

//copying the arraylist, so I don't have to change the original
artOrdenado=new ArrayList<Articulo>(art);
System.out.println(artOrdenado);

Collections.sort(artOrdenado, new Comparator<Articulo>(){
    public int compare(Articulo uno, Articulo otro){
       return uno.getPrecio().compareTo(otro.getPrecio());
    }
});

但它会抛出一个异常,上面写着“不能尊重 int”。

4

5 回答 5

4

您需要像这样在比较器中进行比较:

Collections.sort(artOrdenado, new Comparator<Articulo>(){
    public int compare(Articulo uno, Articulo otro){
        return (uno.getPrecio() - otro.getPrecio());
    }

});

或者通过使用Integer.compare()

于 2013-06-05T08:09:03.500 回答
0

我猜这会getPrecio()返回int(一个原语)。您不能在原语上调用方法(它们不是对象)。但是,您可以在对象上调用方法,并且如果getPrecio()返回一个Integer(与 an 对应的对象int),那么您应该会取得更大的成功(有关 Java 这方面的更多信息,请参见此处,称为装箱)

或者,您可以直接在您的compare()方法中比较整数(例如,如果 price1 < price2,返回 -1 等)

于 2013-06-05T08:08:47.083 回答
0

尝试使用

return uno.getPrecio-otro.getPrecio();

我希望 getPrecio 返回价格值

于 2013-06-05T08:11:36.520 回答
0

的返回值的类型是getPrecio()什么?您是否定义了compareTo()此类中的行为?如果您键入是int使用普通运算符><==比较值并返回您想要的符号。或者干脆使用:

Collections.sort(artOrdenado, new Comparator<Articulo>(){
    public int compare(Articulo uno, Articulo otro){
        return (uno.getPrecio() - otro.getPrecio());
    }
});
于 2013-06-05T08:12:57.617 回答
0

改用此方法进行比较

public int compare(Articulo uno, Articulo otro)
{
    int comparation= (uno.getPrecio()> otro.getPrecio()) ? 1 : 0;
    if(comparation== 0)
    {
       comparation= (uno.getPrecio()== otro.getPrecio()) ? 0 : -1;
    }

return comparation;
}
于 2013-06-05T08:14:54.380 回答