Sorting a Array of Objects throws long [] error
问题描述:
Im遵循MKyong sort examples。Sorting a Array of Objects throws long [] error
我有类覆盖compareTo()
方法排序我的类riesgoTotal
双。 Sort array of object by particular member inside the object/class:
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()
版本递增进出口秩序。
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()
。
+0
谢谢,我没有看到错误。 – 2014-10-16 11:45:18
答
你的datosTotal
引用是一个集合,而不是一个数组。所以你不应该使用Arrays
来排序它,而是Collections.sort
。
出于效率的缘故,我也建议你使用
public int compareTo(AGRinformesActivos o) {
return Double.compare(this.riesgoTotal,o.riesgoTotal);
}
而不是为每个比较两个新的双重目标。
您正在对“集合”进行排序,而不是数组。尝试'Collections.sort()'而不是'Arrays.sort()'。 – Keppil 2014-10-16 11:22:33
^^并提供'比较器''''Collections.sort(datosTotal,new Comparator ...'; –
2014-10-16 11:23:40
“类型Arrays中的方法sort(long [])不适用于参数(ArrayList)“!您可以使用'ArrayList'调用sort方法,但期望使用'long []'。并且...不要运行带有编译错误的代码 –
Seelenvirtuose
2014-10-16 11:24:10