Java 我的ArrayList未按集合进行排序。sort()

Java 我的ArrayList未按集合进行排序。sort(),java,android,Java,Android,我正在尝试按Collections.sort对数组进行排序,因为SDK由于fecha字段未在构造函数中初始化,所以在调用setFecha()之前,它将为null。要处理排序中的空值,请按如下方式更改排序行: Collections.sort(gastos, Comparator.nullsFirst(new ComparatorFecha())); 由于fecha字段未在构造函数中初始化,因此在调用setFecha()之前,它将为null。要处理排序中的空值,请按如下方式更改排序行: Coll

我正在尝试按Collections.sort对数组进行排序,因为SDK由于fecha字段未在构造函数中初始化,所以在调用setFecha()之前,它将为null。要处理排序中的空值,请按如下方式更改排序行:

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

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

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

您可以尝试更改为
o2.getFecha().compareTo(o1.getFecha())
?当然,这不是主要问题,但我只想确定是否调用了comparator。欢迎使用堆栈溢出!请阅读“如何创建一个应用程序”。然后使用链接改进您的问题(不要通过评论添加更多信息)。否则,我们无法回答您的问题并帮助您。如中所示:请包括显示真实数据的示例代码,以及如何对它们进行排序,以及排序结果。从您在这里展示的内容来看,事情应该是正常的,我认为没有明显的错误。您对项目进行排序的标准是什么?通过日期、名称或其他方式?您能否显示正在调用的代码
Dinero.setFecha()
?是否在所有实例上设置相同的日期?(既然允许NULL值,考虑您的比较器是否应该测试NULL值…)是否在调用Collections.sort之前和之后调试Fecha的值?也许他们都一样?或者,您可以演示如何向gastos完全添加值。您是否可以尝试更改为
o2.getFecha().compareTo(o1.getFecha())
?当然,这不是主要问题,但我只想确定是否调用了comparator。欢迎使用堆栈溢出!请阅读“如何创建一个应用程序”。然后使用链接改进您的问题(不要通过评论添加更多信息)。否则,我们无法回答您的问题并帮助您。如中所示:请包括显示真实数据的示例代码,以及如何对它们进行排序,以及排序结果。从您在这里展示的内容来看,事情应该是正常的,我认为没有明显的错误。您对项目进行排序的标准是什么?通过日期、名称或其他方式?您能否显示正在调用的代码
Dinero.setFecha()
?是否在所有实例上设置相同的日期?(既然允许NULL值,考虑您的比较器是否应该测试NULL值…)是否在调用Collections.sort之前和之后调试Fecha的值?也许他们都一样?或者,您可以演示如何将值完全添加到gastos中。好主意——但如果OP的值为null,则其上面的比较器代码中会出现异常。@并且,如果其比较器的o1参数为非null,则日期比较器()可能正确处理空o2参数,因此没有exception@Palamino鉴于此:结果将是nullPointerException@Nemesis但是我们不知道他是否在使用java.util.Date,因为他没有在他的代码段中指定Date类的导入或包。听起来好像你认为Date类型既不是
java.util.Date
及其子类
java.sql.Date
,有些日期为空,有些不为空——排序算法总是为构造函数中的第一个参数选择非空值,并且从不比较两个空值。好主意——但是如果OP中的值为空,他在上面的比较器代码中可能会出现异常。@并且如果比较器的o1参数为非空,则日期比较器为()可能正确处理空o2参数,因此没有exception@Palamino鉴于此:结果将是nullPointerException@Nemesis但是我们不知道他是否在使用java.util.Date,因为他没有在他的代码段中指定Date类的导入或包。听起来好像你认为Date类型既不是
java.util.Date
或其子类
java.sql.Date
,有些日期为空,有些不为空——排序算法总是为构造函数中的第一个参数选择非空值,并且从不比较两个空值。
     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);
Collections.sort(gastos, Comparator.nullsFirst(new ComparatorFecha()));