对对象数组进行排序会引发long []错误

时间:2014-10-16 11:19:54

标签: java arrays sorting object arraylist

我跟随MKyong sort examples

我让AGRinformesActivos课改写compareTo()方法,按riesgoTotal加倍对我的班级进行排序。

public class AGRinformesActivos extends EntidadBase implements Comparable<AGRinformesActivos>{

private static final long   serialVersionUID    = -4341418821044868087L;

private String                  tipoActivo          = "";
private String                  codigo              = "";
private String                  denominacion        = "";
private int                     idAmenaza           = 0;
private double                  impactoTotal        = 0;
private double                  riesgoTotal         = 0;
private int                     valorPendiente      = 0;
ArrayList<Double>               impactoCuali        = new ArrayList<Double>();
ArrayList<String>               impactoCuanti       = new ArrayList<String>();
ArrayList<Double>               riesgoCuali         = new ArrayList<Double>();
ArrayList<String>               riesgoCuanti        = new ArrayList<String>();

使用此compareTo()版本在{as} Im中订购:Sort array of object by particular member inside the object/class

public int compareTo(AGRinformesActivos o) {
    return new Double(this.riesgoTotal).compareTo(new Double(o.riesgoTotal));
}

这是我的代码:

    ArrayList <AGRinformesActivos> datosTotal = new ArrayList<AGRinformesActivos>();
    List listadoActTotal = manager.dameListadoActivos( Integer.parseInt(info.getIdtipoActivo().trim()), info.getCodigo().trim());
for( Object o : listadoActTotal ) {
                fila = (List) o;                    
                String codigoActivo = fila.get( 0 ).toString();             
                // If exists we obtain, if not exists we create.
                if (activosDimension.containsKey( codigoActivo )){
                    // If exists, obtain from activosDimension
                    informesActivo = activosDimension.get( codigoActivo );
                }else{
                    informesActivo = new AGRinformesActivos();
                    activosDimension.put( codigoActivo, informesActivo );
                    // Al objeto le añado tipoActivo, idActivo y Denominación
                    String tipoActivo = manager.dameNombreTipoActivo(info.getIdtipoActivo());
                    informesActivo.setTipoActivo( tipoActivo );
                    informesActivo.setCodigo( codigoActivo );
                    informesActivo.setDenominacion( fila.get( 1 ).toString() );
                    }
                    // Add impactoTotal and riesgoTotal
                    informesActivo.setImpactoTotal( Double.parseDouble( fila.get( 2 ).toString() ) );
                    informesActivo.setRiesgoTotal( Double.parseDouble(fila.get( 3 ).toString() ) );
                }

                informesActivo.getImpactoCuali().add( Double.parseDouble(fila.get( 5 ).toString() ) );
                informesActivo.getRiesgoCuali().add( Double.parseDouble(fila.get( 6 ).toString() ) );

                String gradoImp = dameRangoEconGrado(Double.parseDouble(fila.get( 5 ).toString() ));
                String gradoRiesg = dameRangoEconGrado(Double.parseDouble(fila.get( 6 ).toString() ));              
                if(gradoImp.equals("") ){
                    gradoImp = dameRangoEconGrado(1);
                }
                informesActivo.getImpactoCuanti().add( gradoImp );
                if(gradoRiesg.equals( "" )){
                    gradoRiesg = dameRangoEconGrado(1);
                }
                informesActivo.getRiesgoCuanti().add( gradoRiesg );

                if (!datosTotaltemp.contains( informesActivo )){
                    datosTotaltemp.add( informesActivo );
                    datosTotal.add( informesActivo );
                }
            }
Arrays.sort(datosTotal);

...

当代码到达Arrays.sort(datosTotal);时会抛出错误:

The method sort(long[]) in the type Arrays is not applicable for the arguments (ArrayList<AGRinformesActivos>)
] con causa raíz
java.lang.Error: Unresolved compilation problem: 
    The method sort(long[]) in the type Arrays is not applicable for the arguments (ArrayList<AGRinformesActivos>)

    at com.dominion.procop.agr.struts.actions.AGRInformes.buscarActivosEmpty(AGRInformes.java:270)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

我做错了什么? AGRinformesActivos有一个静态的长。这是问题吗?为什么?在我的比较中使用riesgoTotal的双倍。

提前谢谢

3 个答案:

答案 0 :(得分:2)

您正在排序集合,而不是数组。请尝试使用Collections.sort()代替Arrays.sort()

答案 1 :(得分:2)

您的datosTotal引用是一个集合,而不是一个数组。因此,您不应使用Arrays对其进行排序,而应使用Collections.sort

为了效率,我还建议您使用

public int compareTo(AGRinformesActivos o) {
    return Double.compare(this.riesgoTotal,o.riesgoTotal);
}

而不是为每次比较创建两个新的Double对象。

答案 2 :(得分:1)

Arrays.sort无法对ArrayList进行排序。尝试使用Collections.sort