我已经知道如何对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()
进行比较?
答案 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)
。