Enviar expresión en java

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;
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=184371&siteId=1
Recomendado
Clasificación