我从Java开始,我的问题是我有一个对象的数组列表(“Articulos”,意思是文章),这个对象有属性(如名称、价格等)。我想按每个对象的价格对数组列表进行排序。这是我尝试过的方法。
首先,我手动填充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不能被推迟“。
发布于 2013-06-05 16:09:04
你需要像这样在你的比较器中做比较:
Collections.sort(artOrdenado, new Comparator<Articulo>(){
    public int compare(Articulo uno, Articulo otro){
        return (uno.getPrecio() - otro.getPrecio());
    }
});或使用Integer.compare();
发布于 2013-06-05 16:08:47
我猜getPrecio()会返回int (一个原语)。你不能在原语上调用方法(它们不是对象)。但是,您可以在对象上调用方法,如果getPrecio()返回一个Integer (int的对象副本),那么您应该会获得更多成功(请参阅here以了解有关这方面的更多信息,称为装箱)。
或者,您可以在compare()方法中直接比较int(例如,如果int< price2,则返回-1等)。
发布于 2013-06-05 16:11:37
尝试使用
return uno.getPrecio-otro.getPrecio();我希望getPrecio返回价格值
https://stackoverflow.com/questions/16934613
复制相似问题