NullpointerException para valores Inteiros acima de 500

Olá pessoal se alguém puder me ajudar estou com uma dúvida de como o meu código está atuando, pois tenho uma atividade que busca um usuário pelo seu ID(Variável escolhida), e para esse ID escolhido é setado um novo valor para o seu getSalario.
O meu problema é quando eu busco esse ID usando uma expressão lambda ele não aceita e me informa que o retorno está sendo nulo, alguém poderia me auxiliar, para saber o porque ocorre isso? (Se for relevante estou utilizando a IDE = Intelijidea).

Código abaixo:

public class Main {
    public static void main(String[] args) {
        Locale.setDefault(Locale.US);
        List<Funcionario> funcionarioList = new ArrayList<>();
        Scanner teclado = new Scanner(System.in);
        char opcao = ' ';

        do {
            System.out.println("Adicione id do funcionario: ");
            Integer id = teclado.nextInt();
            System.out.println("Adicione nome do funcionario: ");
            String nome = teclado.next();
            System.out.println("Seu salario: ");
            Double salario = teclado.nextDouble();
            Funcionario funcionario = new Funcionario(id, nome, salario);
            funcionarioList.add(funcionario);
            System.out.println("Deseja continuar adicionando funcionarios: (S/N)?");
            opcao = teclado.next().charAt(0);
        }while(opcao == 's' || opcao == 'S');

        System.out.println("------Lista-de-Funcionarios-Empregare-----------------");
        for(Funcionario y : funcionarioList) {
            System.out.println(y.toString());
        }

        System.out.println("------------Filter-Funcionarios-para-Aumento-do-salario------------------------");
        System.out.println("Procurar o funcionário pelo seu id: ");
        Integer findId = teclado.nextInt();
        teclado.close();
        //Valores acima de 500 atribui nullpointerExpcetion não entendo porque
        for(Funcionario x : funcionarioList) {
            if (x.getId() != findId ) {
                System.out.println("Funcionario não existe");
            } else {
                Funcionario result = funcionarioList.stream().filter(y -> y.getId() == findId).findFirst().orElse(null);
                result.setSalario(result.getSalario() + (result.getSalario() * 0.10));
                System.out.println(result.toString());
            }
        }

Isto não faz sentido. Ou usas o for e o if para encontrar o funcionário ou usas stream com o filter. E a comparação entre objectos Integer deve ser feita com equals e não com ==

    Optional<Funcionario> result = funcionarioList.stream()
            .filter(y -> y.getId().equals(findId))
            .findFirst();
    
    if (result.isPresent()){
        Funcionario func = result.get();
        func.setSalario(func.getSalario() + (func.getSalario() * 0.10));
        System.out.println(func.toString());
    } else {
        System.out.println("Funcionario não existe");            
    }
1 curtida

Nesse caso só tinha colocado o if para ver como esse valor estava indo para o stream.
Mas realmente era a utilização do == de forma equivocada, com equals resolveu, e sobrescrevê-lo. Obrigado