【发布时间】:2014-12-11 17:50:43
【问题描述】:
我正在关注MKyong sort examples。
我有 AGRinformesActivos 类覆盖 compareTo() 方法来按 riesgoTotal double 对我的类进行排序。
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() 版本在 asc 中订购: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 有一个静态长。这是问题吗?为什么?在我的 compareTo 中,我使用了 riesgoTotal 的双倍。
提前谢谢你
【问题讨论】:
-
您正在排序
Collection,而不是数组。试试Collections.sort()而不是Arrays.sort()。 -
^^ 并提供
Comparator<AGRinformesActivos, AGRinformesActivos>的实现:Collections.sort(datosTotal, new Comparator<AGRinformesActivos, AGRinformesActivos>...; -
“Arrays 类型中的方法 sort(long[]) 不适用于参数 (ArrayList
)”!您使用 ArrayList调用排序方法,但它需要long[]。并且...不要运行有编译错误的代码。 -
@Keppil 已更改,现在可以正常工作。你可以发布一个答案来给你积分吗?非常感谢,我没看到。
-
@Victor:当类实现
Comparable时,不需要Comparator。
标签: java arrays sorting object arraylist