Как настроить сетку в Vaadin 8 для сортировки по пользовательскому компаратору?

Так, например, моя сетка состоит из People, так что у меня есть:

public class People
{
    int id;
    String name;
}

Моя сетка такова, что у меня есть:

grid.addColumn(People::getName).setId("Name");

Теперь я знаю, что могу:

grid.sort("Name", SortDirection.ASCENDING);

Проблема в том, что если у меня есть два человека с одинаковым именем, скажем, Джон. В этом случае я хочу сначала отсортировать по name, а затем по id. Идентификатор не является столбцом в сетке, это просто свойство класса People.

Хотя этот пример слишком упрощен, я включил дополнительную информацию, поэтому важно, чтобы я мог сортировать по реальному человеку, а не только по имени. В моем случае сетка — это отчет, а имя человека — лишь одно из многих полей.


person Stephane Grenier    schedule 11.03.2018    source источник
comment
Я думаю, вам придется иметь дело с этим в вашем источнике данных. Например. всегда добавляйте последнюю неявную сортировку по идентификатору.   -  person cfrick    schedule 11.03.2018
comment
Вы также можете включить идентификатор в качестве столбца? Каков фактический источник данных?   -  person Steffen Harbich    schedule 12.03.2018
comment
Я устанавливаю идентификатор, в данном случае это имя. Источником данных является список «Люди» в том смысле, что он не связан ни с чем напрямую и управляется из устаревших систем.   -  person Stephane Grenier    schedule 13.03.2018


Ответы (1)


В итоге я сделал это, предполагая, что у вас есть список автомобилей с людьми, являющимися одним из столбцов:

Grid<Car> grid = new Grid<Car>();
grid.addColumn(Car::getPerson).setComparator((car1, car2) -> 
{
    // ignoring any null checks for getPerson() as they can be null.
    return car1.getPerson().compareTo(car2.getPerson());               
});
person Stephane Grenier    schedule 18.03.2018