Hi!
I am writing a code to compare supervisors and oldUsers and split them into newUsers, retainedUsers and deletedUsers.
Supervisors are the list of userIds which the person selects, oldUsers are a list of userIds which are already in the database.
I want to add new users into the database and delete the unwanted users.
Supervisors contains ids which may have old userIds, new userIds and deleted userIds.
Here is my comparison code:
String[] supervisorIds = new String[]{"2", "4"};
List<String> oldUsers = new ArrayList();
oldUsers.add("1");
oldUsers.add("2");
oldUsers.add("3");
List<Integer> newUserIds = new ArrayList<Integer>();
List<Integer> retainedUserIds = new ArrayList<Integer>();
List<Integer> deletedUserIds = new ArrayList<Integer>();
if (!oldUsers.isEmpty()) {
for (String supervisorId : supervisorIds) {
for (String oldUser : oldUsers) {
if (!oldUser.equals(supervisorId) && !newUserIds.contains(Integer.parseInt(supervisorId))) {
newUserIds.add(Integer.parseInt(supervisorId));
}
}
}
for (String supervisorId : supervisorIds) {
for (String oldUser : oldUsers) {
if (oldUser.equals(supervisorId) && !retainedUserIds.contains(Integer.parseInt(supervisorId))) {
retainedUserIds.add(Integer.parseInt(supervisorId));
}
}
}
int i = 0;
List<Integer> delList = new ArrayList<Integer>();
for (String oldUser : oldUsers) {
for (String supervisorId : supervisorIds) {
if ((oldUser.getId() != Integer.parseInt(supervisorId)) && !deletedUserIds.contains(Integer.parseInt(supervisorId))) {
deletedUserIds.add(oldUser.getId());
} else {
if (newUserIds.contains(Integer.parseInt(supervisorId))) {
delList.add(Integer.parseInt(supervisorId));
}
}
}
i++;
}
for (Integer del : delList) {
if (!retainedUserIds.contains(del)) {
newUserIds.remove(del);
}
}
}
Problem is: I am getting only new users. I am not getting the correct retained users and deleted users.
Can someone suggest a better way of doing this, without too many for loops?
Thanks.