William Åkerman:
Tengo dos métodos que tanto obtener un objeto de usuario de una 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;
}
Dado que los métodos sólo difieren en el caso DECLARACIÓN cómo se podría reducir la duplicación de código? ¿Es posible enviar un valor lógico de expresión / dinámico en los argumentos, por ejemplo?
William Åkerman:
Gracias a las dos respuestas. Esta era la forma en que hice el trabajo.
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;
}