Filtering avoiding unexpected null using lambda's inline

java, java-8, lambda, nullable, nullpointerexception

Solution

You could do a mapping + filtering before running the `forEach` part, which also makes it a bit more readable:

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

Or as an alternative:

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

Problem

I have list for each element I would like to do this (using Java 8): ``` disabledUsersOnLDAP.stream().forEach(user -> usersRepository .findEnabledByUsername(user.getUserName()).setEnabled(false)); ``` How ever `usersRepository.findEnabledByUsername` might return `null`. Of course I can do this instead: ``` disabledUsersOnLDAP.stream().forEach(user -> { UserEntity userEntity = usersRepository.findEnabledByUsername(user.getUserName()); { if (userEntity != null) { userEntity.setEnabled(false); } } }); ``` But I wonder if I could do the `null` check inline (in the first option)?

Original source