Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Olá Lucas, tudo bem com você?
Esse erro ocorre porque está sendo tentado o cast de um EntrySet para um Map.Entry, que é uma conversão incompatível.
Por baixo dos panos, o forEarch vai utilizar algo como:
for(Integer key: pessoas.keySet){
System.out.println("Chave: " + key + "Valor: " + pessoas.get(key);
}Ou seja, iterando pelo conjunto de chaves que o map pessoas têm, e para cada chave, pegamos seu valor associado utilizando o método get().
Essa é uma maneira que pode acontecer por debaixo dos panos o forEach com lambda. No entanto, é interessante lembrar que o Java nos dá tantas alternativas de alto nível, como lambdas, para que não nos preocupemos tanto com o que acontecer internamente, então pode ser que seja feito, internamente, de outra maneira. Ainda assim, é sempre muito interessante buscar ir além e conhecer o que acontece por baixo dos panos, níveis de abstração abaixo, ajuda muito a entender como a linguagem funciona de verdade!
Como sugestão, deixo a leitura da documentação da interface Map, fornecida pela Oracle, que mantém o Java. Lá tem muitos outros métodos da interface que podem ser muito úteis, e você pode inclusive encontrar outras maneiras como a JVM pode fazer por debaixo dos panos! A documentação está em inglês, mas caso seja necessário você pode utilizar a ferramenta de tradução do seu navegador para facilitar o entendimento.
FIco à disposição.
Um grande abraço e bons estudos!