获取Kotlin中两个不同对象数组列表之间的差异



我有两个不同的对象列表,我想显示第一个元素的所有元素,除了那些具有公共名称属性的对象。有没有更好的方法来解决这个问题?

我尝试过的。它仍然不起作用,因为这个过滤器只添加了一个元素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)

最新更新