使用 Comparator.compare 按对象列表排序对象,然后按第二个属性排序



我最初按对象的属性(假设用户的名字(对列表进行排序:

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.compare...,但我不知道该怎么做。这可能吗?这样的东西不起作用:

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

如何使用Comparator.compareing对此进行排序?

角色名称排序后,如何按 firstName 作为第二个属性进行排序?

在这种情况下,

您不能使用方法引用,但可以使用 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));

最新更新