【问题标题】:how to sort List<Object[]>?如何对 List<Object[]> 进行排序?
【发布时间】:2014-05-29 14:08:01
【问题描述】:

我需要按Object[3] 值对List&lt;Object[]&gt; 进行排序。这可能吗? Comparator 应该是什么样子?

我现在不知道怎么做...我已经用简单的比较器实现检查了这个,但它失败了..

提前致谢

【问题讨论】:

  • 您如何按人员年龄对List&lt;Person&gt; 进行排序?
  • 简单的比较器覆盖了 compareTo 方法。但不一样。因为我有 List
  • 所以你有一些代码不起作用?请向我们展示它,并演示它不起作用。
  • 您如何按Object 排序?不可能,因为 Object 没有 compareTo
  • Object 没有实现Comparable。实现Comparable 是指示类具有自然顺序的常规方式,这就是您所追求的。

标签: java arrays comparator


【解决方案1】:

Object[] 的简单比较器如下所示。比较的标准将取决于您要做什么。事实上,比较对象数组并不是那么简单,也许您应该尝试使用其他数据结构来实现您想要实现的任何目标。尽管如此:

public class ObjectArrayComparator implements Comparator<Object[]> {
    public int compare(Object[] o1, Object[] o2) {
        // ...
        return ...;
    }
}

另请参阅Comparator,了解有关其行为方式的更多信息。

【讨论】:

  • 完全没有问题。您可以使用Collections.sort(Collection,Comparator) 对列表进行排序,它应该可以直接使用。 docs.oracle.com/javase/7/docs/api/java/util/… 请注意,比较器不会对对象数组进行排序。相反,它比较两个数组实例。
【解决方案2】:

你仍然需要定义你将如何比较你的对象,但有些方法是这样的

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Sorter {

    class Wrapper implements Comparable{
        Object[] array;

        /* (non-Javadoc)
         * @see java.lang.Comparable#compareTo(java.lang.Object)
         */
        @Override
        public int compareTo(Object o) {
            Object o1 = array[3];

            //replace the code here with the result of the comparison between o1 and o
            //some example here

            return o1.toString().compareTo(o.toString());
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        Sorter s = new Sorter();

        List<Wrapper> list = new ArrayList<Wrapper>();

        Object[] arr1 = new Object[4];
        arr1[0] = "abc1";
        arr1[1] = "def1";
        arr1[2] = "ghi1";
        arr1[3] = new Integer(2);

        Wrapper w1 = s.new Wrapper();
        w1.array = arr1;

        Object[] arr2 = new Object[4];
        arr2[0] = "abc2";
        arr2[1] = "def2";
        arr2[2] = "ghi2";
        arr2[3] = new Integer(1);

        Wrapper w2 = s.new Wrapper();
        w2.array = arr2;

        list.add(w1);
        list.add(w2);

        Collections.sort(list,new Comparator<Wrapper>(){

            @Override
            public int compare(Wrapper o1, Wrapper o2) {
                return o1.compareTo(o2);
            }
        });

        System.out.println(list.get(0).array[3]);

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-19
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多