我的ArrayList没有按Collections.sort()排序

时间:2019-05-29 12:52:05

标签: java android

我试图通过Collections.sort对数组进行排序,因为SDK <24,但是它什么也不做,数组的顺序相同,这是我的Comparator的代码:

public class ComparatorFecha implements Comparator<Dinero> {

@Override
public int compare(Dinero o1, Dinero o2) {
    return o1.getFecha().compareTo(o2.getFecha());
}
}

这里是Dinero类:

public class Dinero implements Serializable {

private String nombre;
private String descripcion;
private int total;
private String date;
private String id;
private Date fecha;

public Dinero(String nombre, String descripcion, int total, String date) {
    this.nombre = nombre;
    this.descripcion = descripcion;
    this.total = total;
    this.date = date;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public void setFecha(Date fecha) {
    this.fecha = fecha;
}

public String getNombre() {
    return nombre;
}

public void setNombre(String nombre) {
    this.nombre = nombre;
}

public String getDescripcion() {
    return descripcion;
}

public void setDescripcion(String descripcion) {
    this.descripcion = descripcion;
}

public int getTotal() {
    return total;
}

public void setTotal(int total) {
    this.total = total;
}

public String getFecha() {
    return date;
}

public void setFecha(String fecha) {
    this.date = fecha;
}


public Date stringToDate(String d1){
    try {
        Log.d(TAG, "FECHA CAMBIADA");
        Date date1=new SimpleDateFormat("dd/MM/yyyy").parse(d1);
        return date1;
    } catch (ParseException e) {
        Log.w(TAG, "FECHA NO CAMBIADA");
        e.printStackTrace();
        return null;
    }
}
}

最后是应该排序的地方

     public void getIngresos(String user, IngresosIsLoaded iLoaded){
    final  ArrayList<Dinero> beneficio = new ArrayList<>();
    final IngresosIsLoaded ingresosIsLoaded = iLoaded;
    DatabaseReference ref = database.getReference().child("Users").child(user).child("Ingresos");

    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            beneficio.clear();
            for(DataSnapshot ds : dataSnapshot.getChildren()){
                String nombreAux = ds.child("nombre").getValue().toString();
                String descAux = ds.child("descripcion").getValue().toString();
                String fecha = ds.child("fecha").getValue().toString();
                int precioAux = Integer.parseInt(ds.child("total").getValue().toString());
 dinero.setFecha(dinero.stringToDate(fecha));
                dinero.setId(ds.getKey());
                gastos.add(dinero);
            }
            Collections.sort(gastos, new ComparatorFecha());
            gastosLoaded.gastosIsLoaded(gastos);

我的数组没有得到排序,也不知道为什么,而且,也没有类stringToDate的日志,就像没有创建函数一样,如果“ fecha”不存在,这可能就是问题,什么也不会排序。

谢谢!

1 个答案:

答案 0 :(得分:0)

由于您的fecha字段未在构造函数中初始化,因此在您调用setFecha()之前,该字段将为null。要处理排序中的空值,请按如下所示更改排序行:

Collections.sort(gastos, Comparator.nullsFirst(new ComparatorFecha()));