我已经看到了其他类似的问题 - 但是人们无法很好地理解这些问题以提供良好的解决方案 - 所以生病做得更好......
我有两个列表,一个用于事件名称,一个用于事件时间
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中事件的次数对这两个列表进行排序。
我相信我需要'映射'这些列表......?但我不明白该怎么做?
答案 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);
因此,您将获得相关事件及其名称
希望这会有所帮助:)