当前位置: 首页 > 知识库问答 >
问题:

迭代并组合不同对象的两个排序ArrayList

惠诚
2023-03-14

我的情况是这样的:我有两个带有不同类型对象的arraylists。每个对象都有一个字段名和一个字段日期ArrayList事件、ArrayList事物。我按名称对arraylists进行排序,如果名称相同,则按日期进行排序。

假设ArrayList1具有以下对象:event1 01.12、event1 05.12、event2 04.03、event3 05.05

Event0    02.11(from2)
Event1    01.12(from1), 05.12(from1)
Event2    02.01(from2), 04.03(from1)
Event3    05.10(from1)

我如何迭代两个arraylists并获得每个唯一的事件和所有日期,以便在一个桌面上显示?

我是这样分类的

Collections.sort(alist, new Comparator<Object1>() {
                @Override
                public int compare(Object1 a1, Object1 a2) {
                    SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
                    Date date1;
                    Date date2;
                    if(a1.name.equals(a2.name)) {
                        try {
                            date1 = format.parse(a1.date);
                            date2 = format.parse(a2.date);
                        } catch (ParseException e) {
                            throw new IllegalArgumentException("Could not parse date!", e);
                        }
                        return date1.compareTo(date2);
                    }

                    else
                        return a1.name.compareTo(a2.name) ;
                }

            });

共有1个答案

端木桐
2023-03-14

最好的方法是让不同类型的对象从同一个类继承/实现同一个接口。如果不可能,请尝试以下操作:

    List<Object> combinedList = new ArrayList<>();
    combinedList.addAll(array1);
    combinedList.addAll(array2);
    Collections.sort(combinedList, new Comparator<Object>() {
        public int compare(Object o1, Object o2) {
            String name1 = o1 instanceof Type1 ? ((Type1) o1).getName()
                    : ((Type2) o1).getName();
            String name2 = o2 instanceof Type1 ? ((Type1) o2).getName()
                    : ((Type2) o2).getName();

            Date date1 = o1 instanceof Type1 ? ((Type1) o1).getDate()
                    : ((Type2) o1).getDate(); 
            Date date2 = o2 instanceof Type1 ? ((Type1) o2).getDate()
                    : ((Type2) o2).getDate(); 
            int comparedNames = name1.compareTo(name2);
            return comparedEvents != 0 ? comparedEvents : date1.compareTo(date2);
        }
    });
 类似资料:
  • 问题 你有一系列排序序列,想将它们合并后得到一个排序序列并在上面迭代遍历。 解决方案 heapq.merge() 函数可以帮你解决这个问题。比如: >>> import heapq >>> a = [1, 4, 7, 10] >>> b = [2, 5, 6, 11] >>> for c in heapq.merge(a, b): ... print(c) ... 1 2 4 5 6 7

  • 为了简单起见,我试图组合两个不同对象的列表,我将它们称为和,最后根据它们的日期值对组合列表进行排序。我已经在这里看到了大部分的答案,但它们并没有展示如何正确实现这样的用例的全貌。 我还实现了一个自定义类,它处理两个给定列表的合并和排序。我们将其称为。使用下面实现的方法。 这就是问题所在,因为我在上得到一个错误,“reason:没有变量类型的实例存在,所以对象符合接口”

  • 本文向大家介绍手写代码:合并两个排序数组相关面试题,主要包含被问及手写代码:合并两个排序数组时的应答技巧和注意事项,需要的朋友参考一下 参考回答:  

  • 问题内容: 假设我有两个类CLassA和CLassB。它们有一个共同的属性,例如每个类拥有的元素数量。 我如何从ClassA和CLassB的对象创建一个集合,并按该属性排序(降序升序无所谓)? 我收集了一个类型,但是当我尝试实现Comparable Interface时,我无法使用该方法(例如,获取返回元素nr的get)。 我有什么解决方案? 谢谢你的帮助! 问题答案: 实际上,如果要将它们放在同

  • 问题内容: 给定两个排序数组,如下所示: 我希望输出为: 要么: 我知道我可以执行以下操作: 我只是想知道是否有一种更快的方法,因为我要处理的数组具有数百万个元素。 任何想法都欢迎。谢谢 问题答案: 由于您使用numpy,因此我怀疑bisec根本不会对您有所帮助。因此,我建议您做两件事: 千万 不能 使用,使用方法,而不是这种种取代阵列,避免了复制。 必须使用没有到位的。因此,不要手动使用逻辑。I

  • 问题是== 将nums1和nums2合并到一个按非递减顺序排序的数组中。 最终排序的数组不应由函数返回,而应存储在数组 nums1 中。为了适应这种情况,nums1 的长度为 m n,其中前 m 个元素表示应合并的元素,最后 n 个元素设置为 0 并应忽略。nums2 的长度为 n。 我的代码中有什么错误??? 您的意见 我的产出 预期产出