我让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
的双倍。
提前谢谢
答案 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