gpt4 book ai didi

java - 我的 ArrayList 未按 Collections.sort() 排序

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:12 24 4
gpt4 key购买 nike

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

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”不存在,这可能是问题,什么都不会被排序。

谢谢!

最佳答案

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

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

关于java - 我的 ArrayList 未按 Collections.sort() 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56361143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com