有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用比较器。比较用于按对象列表和第二个属性对对象进行排序

我最初是根据对象的属性(比如,一个用户根据其名字)对列表进行排序的,如下所示:

Collections.sort(userList, (u1, u2) -> (u1.getFirstName()).compareTo(u2.getFirstName()));

我可以用以下内容替换:

Collections.sort(userList, Comparator.comparing(User::getFirstName));

但是现在用户有一个角色列表,每个角色都有一个角色名,我想按照用户角色角色名对列表进行排序。我想到了这个:

Collections.sort(userList, (u1, u2) -> (u1.getUserRoles().get(0).getRoleName()).compareTo(u2.getUserRoles().get(0).getRoleName()));

这似乎很管用

在IDE中,现在有一条消息:可以替换为Comparator。比较,但我不知道该怎么做。这可能吗?像这样的事情是行不通的:

Collections.sort(userList, Comparator.comparing(User::getUserRoles.get(0).getRoleName());

如何使用比较器对其进行排序。比较

在按roleName排序之后,如何才能按firstName作为第二个属性进行排序


共 (1) 个答案

  1. # 1 楼答案

    在这种情况下,不能使用方法引用,但可以使用lambda表达式:

    Collections.sort(userList, Comparator.comparing(u -> u.getUserRoles().get(0).getRoleName()));
    

    要按两个属性排序,请执行以下操作:

    Collections.sort(userList, Comparator.comparing((Function<User,String>)u -> u.getUserRoles().get(0).getRoleName())
                                         .thenComparing(User::getFirstName));
    

    Collections.sort(userList, Comparator.comparing((User u) -> u.getUserRoles().get(0).getRoleName())
                                         .thenComparing(User::getFirstName));