按公共元素排序多个对象

时间:2013-08-05 17:52:31

标签: java list sorting

我有四个不同对象类型的列表。每个对象类型共享一个公共元素:getTime()。

注意:

  1. 列表是有序的,但可能无法从同一点开始。
  2. 列表可能无法在同一时间点开始。
  3. 我订购这4个对象的最佳方式是什么,以便每个元素“i”具有相同的getTime()值?

2 个答案:

答案 0 :(得分:0)

如果用getTime()的相同元素表示交叉引用列表以匹配具有相同时间的元素...

我会创建一个包含2个方法的包装类getTime()getValue()

public class TimeElement{ 
    final long time;
    final Object value;
    TimeElement(long time, Object value){
        this.time = time;
        this.value = value;
    }    
    public long getTime(){return time;}
    public Object getValue(){return value;}
}

然后,通过添加每个列表的内容创建一个大型列表。

List<TimeElement> list = new ArrayList<TimeElement>();
for(int i=0;i<list1.size();i++){
    list.add(new TimeElement(list1.get(i).getTime(), list1.get(i));
}

然后,对此组合列表进行排序。迭代它,你将能够轻松地获得具有相同时间值的元素。

答案 1 :(得分:-1)

您可以随时按时间对第一个列表进行排序。然后对于其他三个列表,您可以简单地遍历第一个列表,并在同一时间找到其他列表中的对象。

for (Object1 o : list1) {
    for(Object2 o2 : list2) {
        if ((o2.getTime()).equals(o.getTime())) {
            newList2.add(o2);
            break;
        }
    }
    for(Object3 o3 : list3) {
        if ((o3.getTime()).equals(o.getTime())) {
            newList3.add(o3);
            break;
        }
    }
    for(Object4 o4 : list4) {
        if ((o4.getTime()).equals(o.getTime())) {
            newList2.add(o4);
            break;
        }
    }
}