在Java中对多个相对列表进行排序

时间:2016-06-18 17:16:16

标签: java android dictionary arraylist comparator

我已经看到了其他类似的问题 - 但是人们无法很好地理解这些问题以提供良好的解决方案 - 所以生病做得更好......

我有两个列表,一个用于事件名称,一个用于事件时间

List<String> eventNames= new ArrayList<String>();
List<Calendar> eventTimes= new ArrayList<Calendar>();

这些列表之间存在1对1的关系,因此eventNames中的第一项与eventTimes的第一项相关......第二项与第二项相同,第三项......等等。

我可以使用以下命令按升序排序eventTime:

Collections.sort(eventTimes, new Comparator<Calendar>() {
    public int compare(Calendar c1, Calendar c2) {
        return c1.getTime().compareTo(c2.getTime());
    }
});

但我希望按照eventTimes中事件的次数对这两个列表进行排序。

我相信我需要'映射'这些列表......?但我不明白该怎么做?

4 个答案:

答案 0 :(得分:1)

如果你不想创建一个新实体class只是为了对它们进行排序,那么你可以创建一个表示索引的整数列表,然后使用一个列表为{{1}的比较器进行排序。 }。

Calendar

PS:我并不为上面的代码感到骄傲。为了理解,要么将这个代码包装在一个类中,要么创建一个类似的实体类。

答案 1 :(得分:0)

Apache Commons Math库有一个实用工具方法,允许你为double []参数做类似的事情,参见MathArrays#sortInPlace(...)。通过使用compareTo(...)而不是双重比较来调整集合和任意类型的代码应该是非常简单的。

答案 2 :(得分:0)

定义一个新类,例如:

public class Event {
    private final String name;
    private final Calendar time;

    public Event(String name, Calendar time) {
        this.name = name;
        this.time = time;
    }

    public String getName() {
        return name;
    }

    public Calendar getTime() {
        return time;
    }
}

并将您的活动的名称和时间存储在List的{​​{1}}个Event中。

答案 3 :(得分:0)

为该实体创建新的实体类并将其封装

        public class NewEntity {
         String eventNames;    
         Calendar eventTimes;
    // Getter and setter here 
    }

然后当你将它们添加到收藏中时。

List<NewEntity > newEntityList = new ArrayList<NewEntity >();

NewEntity newEntityFirst = new NewEntity();
newEntityFirst .setEventNames(eventNameFirst);
newEntityFirst .setEventTimes(eventTimesFirst);
newEntityList.add(newEntityFirst);


NewEntity newEntitySecond = new NewEntity();
newEntitySecond .setEventNames(eventNameSecond);
newEntitySecond .setEventTimes(eventTimesSecond);
newEntityList .add(newEntitySecond);

因此,您将获得相关事件及其名称

希望这会有所帮助:)