使用 Comparator.comparing 按对象列表对对象进行排序,然后按第二个 属性
Using Comparator.comparing for sorting an object by a list of objects and then by a second property
我最初按对象的属性对列表进行排序(假设 User 按其 firstName):
Collections.sort(userList, (u1, u2) -> (u1.getFirstName()).compareTo(u2.getFirstName()));
我可以替换为:
Collections.sort(userList, Comparator.comparing(User::getFirstName));
但是现在 User 有一个 Roles 的列表,每个角色都有一个 roleName,我想要按 User 的 Role 的 roleName 对列表进行排序。我想到了这个:
Collections.sort(userList, (u1, u2) -> (u1.getUserRoles().get(0).getRoleName()).compareTo(u2.getUserRoles().get(0).getRoleName()));
这似乎工作正常。
在IDE中,现在有消息:可以用Comparator.comparing替换...,但我不知道具体如何做这个。这可能吗?这样的东西不起作用:
Collections.sort(userList, Comparator.comparing(User::getUserRoles.get(0).getRoleName());
如何使用 Comparator.comparing 对它进行排序?
在按 roleName 排序后,如何按 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));
我最初按对象的属性对列表进行排序(假设 User 按其 firstName):
Collections.sort(userList, (u1, u2) -> (u1.getFirstName()).compareTo(u2.getFirstName()));
我可以替换为:
Collections.sort(userList, Comparator.comparing(User::getFirstName));
但是现在 User 有一个 Roles 的列表,每个角色都有一个 roleName,我想要按 User 的 Role 的 roleName 对列表进行排序。我想到了这个:
Collections.sort(userList, (u1, u2) -> (u1.getUserRoles().get(0).getRoleName()).compareTo(u2.getUserRoles().get(0).getRoleName()));
这似乎工作正常。
在IDE中,现在有消息:可以用Comparator.comparing替换...,但我不知道具体如何做这个。这可能吗?这样的东西不起作用:
Collections.sort(userList, Comparator.comparing(User::getUserRoles.get(0).getRoleName());
如何使用 Comparator.comparing 对它进行排序?
在按 roleName 排序后,如何按 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));