【问题标题】:Sort Multiple Objects By Common Element [closed]按公共元素对多个对象进行排序[关闭]
【发布时间】:2013-08-05 17:52:30
【问题描述】:

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

注意事项:

  1. 列表按顺序排列,但不能从同一点开始。
  2. 列表可能不会在同一时间点开始。

对我来说,排序这 4 个对象以使每个元素“i”具有相同的 getTime() 值的最佳方法是什么?

【问题讨论】:

  • 最好的方法?所以你已经实现了我猜是在 getTime 上带有比较器的 Collections.sort?
  • 您的问题不清楚。给定两个具有时间值的列表:a=[ 1, 3, 5 ] 和 b=[ 2, 3, 4 ],结果是什么?我的猜测是:a'= [ 1, null, 3, null, 5 ] 和 b'= [ null, 2, 3, 4, null ]。这是正确的吗?

标签: java list sorting


【解决方案1】:

如果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));
}

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

【讨论】:

    【解决方案2】:

    您可以根据需要按时间对第一个列表进行排序。那么对于其他三个列表,您可以简单地遍历第一个列表,并同时在其他列表中找到对象。

    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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 2017-06-26
      • 2023-02-05
      • 2015-08-28
      相关资源
      最近更新 更多