我有两个不同的对象列表,我想显示第一个元素的所有元素,除了那些具有公共名称属性的对象。有没有更好的方法来解决这个问题?
我尝试过的。它仍然不起作用,因为这个过滤器只添加了一个元素rest。
private fun getNonCommonUsers(users: List<UserModel>, userlist: List<User>): List<User> {
val nonCommonUsers = ArrayList<User>()
if(userlist.isNotEmpty()) {
for (user in Users) {
for (userl in userlist) {
if (userl.getUserName(getResourceProvider(requireContext())) != user.getDisplayName()) {
if(!nonCommonUsers.contains(userl))
nonCommonUsers.add(userl)
}
}
}
}
return nonCommonUsers
}
如果我正确理解您的问题,您希望返回userlist: List<User>
中所有用户的列表,其中users: List<UserModel>
中不存在用户名。
您可以使用userList
上的filter
-方法进行此操作。我首先使用map
函数从users
获取所有相关的用户名。然后,我从userlist
创建一个新的用户列表,过滤掉usernames
集中存在的用户名的所有用户。像这样:
private fun getNonCommonUsers(users: List<UserModel>, userlist: List<User>): List<User> {
val resourceProvider = getResourceProvider(requireContext())
val usernames = users.map { it.getDisplayName() }.toSet()
return userList.filter { it.getUserName(resourceProvider) !in usernames }
}
如果我已经理解你想做什么,也许你可以尝试:
private fun nonCommonUsers(users: List<UserModel>, userlist: List<User>): List<User> =
users.map { User (userName = mapDisplayName(it.displayName))}.minus(userlist)