使用两个参数对数组进行排序

时间:2014-10-29 07:18:31

标签: java arrays sorting

我已经知道如何对ArrayList进行排序但我想知道是否可以使用两个参数对数组进行排序:我有一个数组5个相同的对象,其中包含一个浮点数和一个字符串,如下所示:

- object 1 : 0 "DD"
- object 2 : 3 "FF"
- object 3 : 1 "GG"
- object 4 : 2 "AA"
- object 5 : 1 "AA"

我希望他们这样排序:

- object 1 : 0 "DD"
- object 5 : 1 "AA"
- object 3 : 1 "GG"
- object 4 : 2 "AA"
- object 2 : 3 "FF"

是否可以通过乘以Float.compare()String.compare()来比较它们? 或者您是否需要先使用Float.compare()对它们进行排序,然后创建子阵列以与String.compare()进行比较?

2 个答案:

答案 0 :(得分:3)

是的,当然。您只需要一个比较器,通过浮点值比较元素,如果它们的浮点值相等,则将它们与字符串值进行比较:

public class FooComparator implements Comparator<Foo> {
    @Override
    public int compare(Foo f1, Foo f2) {
        int result = Float.compare(f1.getFloatValue(), f2.getFloatValue());
        if (result == 0) {
            result = f1.getStringValue().compareTo(f2.getStringValue());
        }
        return result;
    }
}

Java 8甚至可以为您做到这一点:

Comparator<Foo> c = Comparator.comparingDouble(Foo::getFloatValue)
                              .thenComparing(Foo::getStringValue);

答案 1 :(得分:2)

您需要将班级定义为Comparable

public MyClass implements Comparable<MyClass> {
    private float f;
    private String s;

    @Override
    public int compare (MyClass other) {
       int first = Float.compare(f, other.f);
       if (first != 0) {
           return first;
       }

       return s.compare(other.s);
    }
}

然后只需致电Arrays.sort(myList)