我试图通过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”不存在,这可能就是问题,什么也不会排序。
谢谢!
答案 0 :(得分:0)
由于您的fecha字段未在构造函数中初始化,因此在您调用setFecha()之前,该字段将为null。要处理排序中的空值,请按如下所示更改排序行:
Collections.sort(gastos, Comparator.nullsFirst(new ComparatorFecha()));