我有以下自定义代码方法来Sort,要求是我们必须基于BoardPoint、OffPoint、LastName 和 FirstName 进行自定义排序。
我的代码:
private List<ReservationRow> sortRows(List<ReservationRow> reservationRows) {
return reservationRows.stream()
.sorted(Comparator.comparing(row -> row.getFlights().get(0).getBoardPoint())
.thenComparing(row -> row.getFlights().get(0).getOffPoint())
.thenComparing(row -> row.getNames().get(0).getLastName())
.thenComparing(row -> row.getNames().get(0).getFirstName()))
.toList();
}
class ReservationRow {
private List<ReservationName> names;
private List<ReservationFlight> flights;
//setters and getters
}
class ReservationName {
private String lastName;
private String firstName;
}
class ReservationFlight {
private String boardPoint;
private String offPoint;
}
这里我只用
row.get(0)
进行排序。
如果我们有多个姓名和航班怎么办,因为它们是列表。所以我也必须对内部进行排序。
我做了一些研究,但无法更好地理解这一点。
private List<ReservationRow> sortRows(List<ReservationRow> reservationRows) {
return reservationRows.stream()
.sorted(Comparator.comparing(row -> row.getFlights().get(0).getBoardPoint())
.thenComparing(row -> row.getFlights().get(0).getOffPoint())
.thenComparing(row -> row.getNames().get(0).getLastName())
.thenComparing(row -> row.getNames().get(0).getFirstName())
.thenComparingInt(row -> row.getFlights().size()) // Compare based on the number of flights
.thenComparingInt(row -> row.getNames().size()) // Compare based on the number of names
.thenComparing(row -> {
// Compare each flight within the row
List<ReservationFlight> flights = row.getFlights();
return Comparator.comparing(ReservationFlight::getBoardPoint)
.thenComparing(ReservationFlight::getOffPoint)
.compare(flights.get(0), flights.get(flights.size() - 1));
})
.thenComparing(row -> {
// Compare each name within the row
List<ReservationName> names = row.getNames();
return Comparator.comparing(ReservationName::getLastName)
.thenComparing(ReservationName::getFirstName)
.compare(names.get(0), names.get(names.size() - 1));
}))
.toList();
}