【问题标题】:sorting integers in a arraylist of objects对对象数组列表中的整数进行排序
【发布时间】:2013-06-05 08:05:33
【问题描述】:

我从 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”。

【问题讨论】:

    标签: java sorting arraylist integer


    【解决方案1】:

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

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

    或者使用Integer.compare();

    【讨论】:

      【解决方案2】:

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

      或者,您可以直接在 compare() 方法中比较整数(例如,如果 price1

      【讨论】:

        【解决方案3】:

        尝试使用

        return uno.getPrecio-otro.getPrecio();
        

        我希望 getPrecio 返回价格值

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

            改用此方法进行比较

            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;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-04-09
              • 1970-01-01
              • 2018-03-08
              • 2012-12-01
              • 2013-12-31
              • 2018-02-07
              • 1970-01-01
              相关资源
              最近更新 更多