Java 如何解决自定义比较器在对对象列表排序时的意外行为?

Java 如何解决自定义比较器在对对象列表排序时的意外行为?,java,android,sorting,android-recyclerview,Java,Android,Sorting,Android Recyclerview,我正在尝试对一个名为“提醒”的对象列表进行排序,这些对象显示在我的Android应用程序的recyclerview中。我使用一个自定义比较器来比较int类型的对象的一个变量 我已经通过使用另一个变量(日期)对对象列表进行了排序。我制作的自定义比较器可以很好地处理日期对象 这是我用来使用整数变量对对象排序的比较器,在本例中,整数变量是对象的优先级 公共无效排序优先级{ Collections.sortreminderList,新的Comparator{ @凌驾 公共内部比较提醒o1,提醒o2{ 返

我正在尝试对一个名为“提醒”的对象列表进行排序,这些对象显示在我的Android应用程序的recyclerview中。我使用一个自定义比较器来比较int类型的对象的一个变量

我已经通过使用另一个变量(日期)对对象列表进行了排序。我制作的自定义比较器可以很好地处理日期对象

这是我用来使用整数变量对对象排序的比较器,在本例中,整数变量是对象的优先级

公共无效排序优先级{ Collections.sortreminderList,新的Comparator{ @凌驾 公共内部比较提醒o1,提醒o2{ 返回o1.getPriority-o2.getPriority; } }; reminderAdapter.notifyDataSetChanged; } 布局上有一个按钮调用上面的sortByPriority方法。单击时,它实际上会执行一些排序操作,但结果在列表或recyclerview中不一致

例如,初始数据集类似于此优先级值范围从1到4,优先级属于提醒类

初始数据:4,1,1,4,2,3,2,1,1,2

使用上述比较器排序:1,1,1,2,2,4,1,2,3,4

看起来好像要正确地工作,但是中间发生了一些事情。顺便说一下,我要按降序排列

我是新来的,所以我可能搞砸了。非常感谢您的帮助。

比较方法基本上会告诉您传递的参数中哪一个更大

public int compare(Reminder o1, Reminder o2) {
 return o1.getPriority() - o2.getPriority();
}
在您的示例中,如果函数返回一个正数,则表示o1更大,如果为0,则表示它们相等。如果是负数,那么o2更大

public int compare(Reminder o1, Reminder o2) {
 return o1.getPriority() - o2.getPriority();
}
如果你想让它们按降序排列,你可以用两种方法。首先是通过反转比较方法逻辑

public int compare(Reminder o1, Reminder o2) {
 // o2 - o1 instead of o1 - o2
 return o2.getPriority() - o1.getPriority();
}
另一种方法是在对列表排序后使用Collections.reverseOrder

Collections.sort(reminderList, Collections.reverseOrder());

关于不正确的值,请考虑上述逻辑,再次检查数据。

谢谢您的回复。我进一步检查了我的代码,你是对的。排序功能工作正常。RecyclerView中每个项目的优先级值来自每个视图中的SeekBar。由于某些原因,当我滚动RecyclerView或数据发生更改时,每个SeekBar的进度值都会更改。因此,排序是正确的,但要排序的值不断变化。知道那是什么吗?