【问题标题】:Sorting ArrayList<Object[]> by objects inside (String, Date, etc.) in reverse order [duplicate]按相反顺序按内部对象(字符串、日期等)对 ArrayList<Object[]> 进行排序[重复]
【发布时间】:2015-03-25 23:16:20
【问题描述】:

假设有一个ArrayList&lt;Object[]&gt;,里面包含各种对象:

ArrayList<Object[]> list = new ArrayList<>();
list.add(new Object[]{"cat", (long)1422355945});
list.add(new Object[]{"dog", (long)1422355970});
list.add(new Object[]{"rat", (long)1422355900});

我们如何才能有效地通过第一个Object(即String)以相反的顺序对该列表进行排序?并在第二个Object(即long)之前做同样的事情?

【问题讨论】:

  • 通过编写适当的比较器。
  • 是的,我期待这个答案。我们可以在这里分享真实的例子吗?

标签: java sorting arraylist


【解决方案1】:

只需创建一个比较器,类似于下面的示例:

    List<Object[]> list = new ArrayList<>();
    list.add(new Object[] { "cat", (long) 1422355945 });
    list.add(new Object[] { "dog", (long) 1422355970 });
    list.add(new Object[] { "rat", (long) 1422355900 });

    Collections.sort(list, new Comparator<Object[]>() {
        @Override
        public int compare(Object[] o1, Object[] o2) {
            int cmp1 = ((String) o1[0]).compareTo((String) o2[0]);
            if (cmp1 == 0) {
                return Long.compare((Long) o1[1], (Long) o2[1]);
            }
            return cmp1;
        }
    });

【讨论】:

  • 我们怎样才能以相反的顺序(仅按一列)?
  • @ErnestasGruodis 对于该列,将 o2 与 o1 进行比较,而不是将 o1 与 o2 进行比较。
猜你喜欢
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 2012-10-24
  • 2021-07-05
相关资源
最近更新 更多