在对象的arraylist中排序整数

时间:2013-06-05 08:05:34

标签: java sorting arraylist integer

我从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不能被引用”。

5 个答案:

答案 0 :(得分:4)

您需要在比较器中进行比较,如下所示:

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

});

或者使用Integer.compare();

答案 1 :(得分:0)

我猜测getPrecio()会返回int(原语)。你不能在原语上调用方法(它们不是对象)。但可以调用对象上的方法,如果getPrecio()返回Integer(与int对应的对象),那么您应该获得更多成功(请参阅here有关Java的这方面的更多信息,称为拳击)

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

答案 2 :(得分:0)

尝试使用

return uno.getPrecio-otro.getPrecio();

我希望getPrecio返回价格值

答案 3 :(得分:0)

getPrecio()的返回值的类型是什么?您是否在此课程中定义了compareTo()的行为?如果您键入int,请使用普通操作员><==来比较这些值并返回您想要的符号。或者只是使用:

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

答案 4 :(得分: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;
}