Java 对对象数组排序会引发长[]错误
我在跟踪调查 我有classJava 对对象数组排序会引发长[]错误,java,arrays,sorting,object,arraylist,Java,Arrays,Sorting,Object,Arraylist,我在跟踪调查 我有classagrinformasativosoverridingcompareTo()方法按riesgotottaldouble对我的类进行排序 public class AGRinformesActivos extends EntidadBase implements Comparable<AGRinformesActivos>{ private static final long serialVersionUID = -434141882104486
agrinformasativos
overridingcompareTo()
方法按riesgotottal
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>();
这是我的代码:
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);
...
我做错了什么AgrinformasActivos
有一个静态长字符串。这就是问题所在吗?为什么?在我的比较中,我使用的是riesgoTotal
的两倍
提前感谢您
数组。排序
无法对数组列表进行排序。尝试使用数组。排序不能对数组列表进行排序。尝试使用您正在对集合而不是数组进行排序。尝试代替Arrays.sort()
对集合而不是数组进行排序。尝试代替Arrays.sort()
您的datosTotal
引用是一个集合,而不是数组。因此,您不应该使用数组
对其进行排序,而应该使用集合。排序
为了提高效率,我还建议您使用
public int compareTo(AGRinformesActivos o) {
return Double.compare(this.riesgoTotal,o.riesgoTotal);
}
而不是为每次比较创建两个新的双对象。您的
datosTotal
引用是一个集合,而不是数组。因此,您不应该使用数组
对其进行排序,而应该使用集合。排序
为了提高效率,我还建议您使用
public int compareTo(AGRinformesActivos o) {
return Double.compare(this.riesgoTotal,o.riesgoTotal);
}
而不是为每次比较创建两个新的双对象。您是在对
集合进行排序,而不是对数组进行排序。尝试Collections.sort()
而不是Arrays.sort()
^^^,并提供比较器的实现:Collections.sort(datosTotal,新比较器…
;“类型数组中的方法sort(long[])不适用于参数(ArrayList)”!您使用ArrayList
调用排序方法,但它需要long[]
。还有……不要运行有编译错误的代码。@Keppil,已更改,现在可以正常工作。你能发布一个答案来给你打分吗?非常感谢,我没有看到。@Victor:当类实现Comparable
时,不需要比较器。你是在排序集合,而不是数组。试试e> Collections.sort()
而不是Arrays.sort()
^^^,并提供比较器的实现:Collections.sort(datosTotal,新比较器…
;“类型数组中的方法sort(long[])不适用于参数(ArrayList)”!您使用ArrayList
调用排序方法,但它需要long[]
。还有……不要运行有编译错误的代码。@Keppil,已更改,现在可以正常工作。您能发布一个答案来给您打分吗?非常感谢,我没有看到。@Victor:当类实现Comparable
时,不需要比较器。
public int compareTo(AGRinformesActivos o) {
return Double.compare(this.riesgoTotal,o.riesgoTotal);
}