Send expression in java

William Åkerman :

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?

William Åkerman :

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

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=73651&siteId=1