设想
我有一个类变量arraylist,当我调用搜索时,它将从某个 serviceProvider 填充,当达到最大结果时,它将停止接收结果。
serviceProvider 以数据块的形式提供数据。
每次我从 serviceProvider 获得一个结果集时,这个 arrayList 都会与提供者提供的新数据集一起添加。
然后,通过将此 arrayList 传递给模型中的临时列表,这将显示在我的视图中。
因此,每当我得到一个结果集(或一大块结果)时,我的 arrayList 都会更新,然后我将清除模型中的 tempList 并将新的 set arrayList 添加到 tempList 中,然后重新绘制列表。
我为用户提供了在搜索过程中对列表进行排序的功能,但这实际上造成了我的问题。
问题
java.lang.ArrayIndexOutOfBoundsException
at java/util/Collections.sort(Ljava/util/List;Ljava/util/Comparator;)V (:0:59)
at com/test/utility/Utility.sortList(ILjava/util/List;)V (Utility.java:517:175)
at com/test/model/contentdiscovery/SearchModel.SortSearchResults()V (SearchModel.java:701:154)
所以发生的事情是,在搜索过程中,我对列表进行了排序 AZ,然后对列表进行了排序 ZA,在完成此操作时列表正在更新。
所以我在代码中做了什么:
SortSearchResults()
{
Utility.sortList(sort_A_Z, arrayList);
}
哪个叫
Collections.sort(arrayList, new TitleComparatorAtoZUI());
然后当我将排序选项更改为排序 ZA
SortSearchResults()
{
Utility.sortList(sort_Z_A, arrayList);
}
哪个叫
Collections.sort(arrayList, new TitleComparatorZtoAUI());
但是每个步骤中的 arrayList 可能会添加更多元素。
问题
如何解决这个问题呢?请指教。
我尝试过同步方法Utility.sortList
和SearchModel.SortSearchResults()
. 它仍然产生了问题。
所以我总是不断地将对象添加到arrayList,但是我的视图然后将这个arrayList过滤到它的tempList中(通过每次我们得到一个新的结果集时清除并再次添加它)。
因此,当我们进行排序时,会提供 arrayList 进行排序,完成后,我们将再次将排序后的 arrayList 过滤掉到 tempList(通过清除并再次添加它)。