3

我正在尝试在我的应用程序中进行多列排序。

就像我有名字,姓氏列

现在,当我单击名字标题时,它按名字排序,当我单击姓氏列时,它按姓氏列排序..

我需要的是,当我单击名字标题时,它应该根据名字排序,然后如果我单击姓氏(使用 shift 或任何其他选项)标题,它应该根据名字和姓氏进行排序,名字作为主列和姓氏作为子排序列

这就是我现在所拥有的

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);
}
4

1 回答 1

2

好吧,您需要为每一列使用不同的比较器,第二个比较器是您需要更改的比较器。首先它必须对 FirstName 进行排序,如果名字相等,则继续比较姓氏。我没有使用你的 DTO,我不检查空值,但它是同一件事,你明白了

ArrayList<Map> list = new ArrayList<Map>();
ListHandler<Map> _sortHandler = new ListHandler<Map>(list);

Column columnDefinitionFirstName = null; // create your column first name
columnDefinitionFirstName.setSortable(true);

//
_sortHandler.setComparator(columnDefinitionFirstName, new Comparator<Map>()
{
    public int compare(Map o1, Map o2)
    {
        int res = 0;

        String object1 = (String) o1.get("FIRST_NAME");
        String object2 = (String) o2.get("FIRST_NAME");

        res = object1.compareTo(object2);

        return res;
    }
});



Column columnDefinitionLastName = null; // create your column last name
columnDefinitionLastName.setSortable(true);



_sortHandler.setComparator(columnDefinitionLastName, new Comparator<Map>()
{
    public int compare(Map o1, Map o2)
    {
        int res = 0;

        String object1 = (String) o1.get("FIRST_NAME");
        String object2 = (String) o2.get("FIRST_NAME");

        res = object1.compareTo(object2);

        if(res == 0)
        {
             String object11 = (String) o1.get("LAST_NAME");
             String object22 = (String) o2.get("LAST_NAME");

             res = object11.compareTo(object22);
        }

        return res;
    }
});
于 2013-09-17T08:38:32.037 回答