Collection.sort()基于第一次排序的第二次排序

时间:2014-03-31 14:07:47

标签: java sorting collections

我在List<RSSQuestion>中有一个问题列表,我想对其进行排序:首先使用keyActivity,然后在每个keyActivitysubActivities;我需要根据subActivities来解决问题。

例如:

  1. OutLine Design(keyActivity)
    1. SubActivity One
  2. 规范(keyActivity)
    1. 概述
    2. 积压
  3. 我的代码如下,即基于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进行排序?

2 个答案:

答案 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.sortstable

  

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