如何对包含字符和整数的数组进行排序?

时间:2016-07-17 14:58:21

标签: java arrays

考虑以下数组:

{5,"k",2,"d",3,"e"}

如何对数组进行排序,使字符和整数分别组合在一起并进行排序:

{"d","e","k",2,3,5} 

1 个答案:

答案 0 :(得分:1)

您可以通过调用Arrays上的sort()方法之一对数组进行排序。

在您的情况下,您要拨打sort(T[] a, Comparator<? super T> c)

由于您的数组是Object[],这意味着您需要实施Comparator<Object>

这是一个示例实现,可以根据需要对您的示例值进行排序:

public final class MixedComparator implements Comparator<Object> {
    @Override
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public int compare(Object obj1, Object obj2) {
        Class<?> class1 = obj1.getClass();
        Class<?> class2 = obj2.getClass();

        // Sort values of same type according to their natural order
        if (class1 == class2)
            return ((Comparable)obj1).compareTo(obj2);

        // Sort values of different type by class name,
        // in descending order, so `String` sorts before `Integer`
        return class2.getName().compareTo(class1.getName());
    }
}

然后你就这样使用它:

Object[] arr = { 5, "k", 2, "d", 3, "e" };
Arrays.sort(arr, new MixedComparator());

System.out.println(Arrays.toString(arr));

输出:

[d, e, k, 2, 3, 5]