我最初按对象的属性(假设用户的名字(对列表进行排序:
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));