java8写一个按多个key进行排序的共通方法
时间: 2024-05-02 15:18:38 浏览: 15
以下是一个按多个key进行排序的Java 8共通方法的示例代码:
```
import java.util.*;
public class MultiKeySorter {
public static <T> void sortByKeys(List<T> list, Comparator<T>... comparators) {
Comparator<T> multiKeyComparator = (o1, o2) -> {
for (Comparator<T> comparator : comparators) {
int result = comparator.compare(o1, o2);
if (result != 0) {
return result;
}
}
return 0;
};
Collections.sort(list, multiKeyComparator);
}
}
```
这个方法可以接受一个列表和任意数量的比较器。它将这些比较器组合成一个多键排序比较器,并在列表上应用它,以按多个键对列表进行排序。
例如,假设我们有一个包含Person对象的列表,其中每个对象都有一个名字和一个年龄属性。我们可以使用以下代码将该列表按名称和年龄排序:
```
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 20),
new Person("David", 25)
);
MultiKeySorter.sortByKeys(people,
Comparator.comparing(Person::getName),
Comparator.comparing(Person::getAge)
);
people.forEach(System.out::println);
```
输出结果为:
```
Alice (25)
Bob (30)
Charlie (20)
David (25)
```
我们可以看到,列表首先按名称排序,然后按年龄排序,因此Alice排在David前面,而David和Alice的年龄相同,因此按名称排序后按年龄排序时,David排在Alice前面。
该方法还可以适用于其他数据类型,只要提供适当的比较器即可。