Я пытаюсь выполнить сортировку нескольких столбцов в своем приложении.GWT: сортировка нескольких столбцов
Как я быть_наст ПгвЬЫат, фамилия колонка
Прямо сейчас, когда я нажимаю на заголовке ПгвЬЫата, сортирует согласно FirstName, когда я нажимаю на LastName колонки сортирует согласно колонку LastName ..
то, что мне нужно, когда я нажимаю на заголовок первого имени, он должен сортироваться по первому имени, а затем, если я нажму на заголовок lastname (со сдвигом или любой другой), он должен сортироваться на основе как firstname, так и lastname, firstname как первичный столбец и фамилия в качестве дополнительной сортировочной колонны
вот что у меня есть
private void sortTableUsers(List<UserDTO> userList){
ListDataProvider<UserDTO> dataProvider = new ListDataProvider<UserDTO>();
dataProvider.addDataDisplay(usersTable);
List<UserDTO> list = dataProvider.getList();
for (UserDTO UserDTO : userList) {
list.add(UserDTO);
}
final ListHandler<UserDTO> columnSortHandler = new ListHandler<UserDTO>(list);
columnSortHandler.setComparator(firstNameColumn,new Comparator<UserDTO>() {
public int compare(UserDTO o1,UserDTO o2) {
if (o1 == o2) {
return 0;
}
// Compare the firstname columns.
if (o1 != null) {
return (o2 != null) ? o1.getUser().getFirstName().compareTo(o2.getUser().getFirstName()) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(lastNameColumn,new Comparator<UserDTO>() {
public int compare(UserDTO o1,UserDTO o2) {
if (o1 == o2) {
return 0;
}
// Compare the lastname columns.
if (o1 != null) {
return (o2 != null) ? o1.getUser().getLastName().compareTo(o2.getUser().getLastName()) : 1;
}
return -1;
}
});
usersTable.getColumnSortList().push(firstNameColumn);
usersTable.getColumnSortList().push(middleNameColumn);
}
Как это обычно делается в том, что при нажатии на FirstName, и затем в lastname (не требуется никакой клавиши shift), тогда lastname становится основным (!) критерием сортировки, а firstname - вторичным (что довольно интуитивно, когда вы его пытаетесь). Обычно это достигается с помощью [стабильных алгоритмов сортировки] (http://en.wikipedia.org/wiki/Category:Stable_sorts). –
Возникает вопрос о заголовке, который должен улавливать нажатой клавишу сдвига или о алгоритме сортировки? – otonglet
@ChrisLercher: и если я не ошибаюсь, это именно то, что делает вышеуказанный код («ListHandler» обновляет список на месте, вместо того, чтобы возвращаться из «несортированного» списка и использует 'Collections.sort()' который гарантирует стабильный вид). –