我有要执行此操作的每个元素的列表(使用Java 8):

disabledUsersOnLDAP.stream().forEach(user -> usersRepository
                .findEnabledByUsername(user.getUserName()).setEnabled(false));
usersRepository.findEnabledByUsername如何返回null
当然我可以这样做:
disabledUsersOnLDAP.stream().forEach(user -> {
    UserEntity userEntity = usersRepository.findEnabledByUsername(user.getUserName());
    {
        if (userEntity != null) {
            userEntity.setEnabled(false);
        }
    }
});
但是我想知道是否可以在内联中执行null检查(在第一个选项中)?

最佳答案

您可以在运行forEach部分之前进行映射+过滤,这也使其更具可读性:

disabledUsersOnLDAP.stream()
            .map(user -> usersRepository.findEnabledByUsername(user.getUserName()))
            .filter(userEntity -> userEntity != null)
            .forEach(userEntity -> userEntity.setEnabled(false));

或作为替代:
disabledUsersOnLDAP.stream()
            .map(User::getUsername)
            .map(usersRepository::findEnabledByUsername)
            .filter(Objects::nonNull)
            .forEach(userEntity -> userEntity.setEnabled(false));

10-06 16:20