gpt4 book ai didi

java - 使用 Comparator.comparing 按对象列表然后按第二个属性对对象进行排序

转载 作者:搜寻专家 更新时间:2023-11-01 01:49:19 25 4
gpt4 key购买 nike

我最初按对象的属性对列表进行排序(假设是 User 按其 firstName):

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

我可以替换为:

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

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

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

这似乎工作正常。

在 IDE 中,现在有消息:Can be replaced with 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));

关于java - 使用 Comparator.comparing 按对象列表然后按第二个属性对对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48322153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com