Search code examples
javacode-duplication

Send expression in java


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?


Solution

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