在java中发送表达式

Wil*_*man 4 java code-duplication

我有两种方法都可以从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;
}
Run Code Online (Sandbox Code Playgroud)

由于方法只在if语句中有所不同,如何减少代码重复?例如,可以在参数中发送表达式/动态布尔值吗?

shm*_*sel 6

您可以创建一个接受谓词并返回第一个匹配元素的公共方法:

private User getUser(Predicate<User> predicate) {
    return listOfLoggedInUsers.stream()
            .filter(predicate)
            .findFirst()
            .orElse(null);
}

public User getUser(int userID) {
    return getUser(user -> user.getID() == userID);
}

public User getUser(String username) {
    return getUser(user -> user.getUsername().equals(username));
}
Run Code Online (Sandbox Code Playgroud)