I have two methods that both get a user object from an Arraylist.
public User getUser(int userID) {
ListIterator<User> listIterator = listOfLoggedInUsers.listIterator();
User user;
while(listIterator.hasNext()) {
user = listIterator.next();
if (user.getID() == userID) {
return user;
}
}
return null;
}
public User getUser(String username) {
ListIterator<User> listIterator = listOfLoggedInUsers.listIterator();
User user;
while(listIterator.hasNext()) {
user = listIterator.next();
if (user.getUsername().equals(username)) {
return user;
}
}
return null;
}
Since the methods only differ in the if statment how could code duplication be reduced? Is it possible to send a expression/dynamic boolean in the arguments for example?
Thanks to both answers. This was how I made it work.
public User getUserByID(int userID) {
return getUser(user -> user.getID() == userID);
}
public User getUserByUsername(String username) {
return getUser(user -> user.getUsername().equals(username));
}
private User getUser(Predicate<User> predicate) {
ListIterator<User> listIterator = listOfLoggedInUsers.listIterator();
User user;
while(listIterator.hasNext()) {
user = listIterator.next();
if (predicate.test(user)) {
return user;
}
}
return null;
}