我在List<RSSQuestion>
中有一个问题列表,我想对其进行排序:首先使用keyActivity
,然后在每个keyActivity
中subActivities
;我需要根据subActivities
来解决问题。
例如:
我的代码如下,即基于keyActivity
对问题进行排序,但我不知道如何根据subActivity
进行第二次排序:
private static List<RSSQuestion> sortingExtractedData(List<RSSQuestion> extractedDataByKeyactivity) {
List<RSSQuestion> exctractedData = new ArrayList<>();
Collections.sort(extractedDataByKeyactivity, new Comparator<RSSQuestion>() {
@Override
public int compare(RSSQuestion o1, RSSQuestion o2) {
return o1.getKeyActivity().compareTo(o2.getKeyActivity());
}
});
for (RSSQuestion rssQuestion : extractedDataByKeyactivity) {
Collections.sort(rssQuestion.getSubActivity(), new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
}
exctractedData.addAll(extractedDataByKeyactivity);
return exctractedData;
}
请告诉我,如何对其余subActivities
进行排序?
答案 0 :(得分:5)
应该只使用一个Comparator
来完成,但只有当SubActivity
相同时才会转到KeyActivity
(例如keyActivityCompare == 0
):
Collections.sort(extractedDataByKeyactivity, new Comparator<RSSQuestion>() {
@Override
public int compare(RSSQuestion o1, RSSQuestion o2) {
int keyActivityCompare = o1.getKeyActivity().compareTo(o2.getKeyActivity());
if (keyActivityCompare == 0)
return o1.getSubActivity().compareTo(o2.getSubActivity());
return keyActivityCompare;
}
});
答案 1 :(得分:4)
Collections.sort
是stable:
sort使用的算法不一定是mergesort,但它必须是稳定的。
这意味着如果两个元素具有相同的值,则排序不会更改其顺序。您可以首先对子活动进行排序,然后对关键活动进行排序。
作为一个例子,我排序数字元组,首先是第一个元素,然后是第二个元素。输入:
(4, 2), (1, 0), (3, 3), (4, 1)
首先对第二个元素进行排序:
(1, 0), (4, 1), (4, 2), (3, 3)
然后在第一个元素上再次排序:
(1, 0), (3, 3), (4, 1), (4, 2)
这种排序方式让人想起radix sort。