A partir do sysout "iterando nos maps 3" ele não printa mais os valores do foreach, somente printa os sysout fora dos loops, que seria: "iterando no maps 3" e "outros formados de loops". Alguém saberia me explicar porque? eu troquei de lugar e aparentou funcionar... mas pq nesta ordem não???
Também, entre values e entryset, alguém sabe a diferença e quando é melhor usar um do q o outro?
Map<Integer, String> peoples = new HashMap<>();
    peoples.put(21, "Leonardo");
    peoples.put(27, "Fabio");
    peoples.put(19, "Jade");
    peoples.put(23, "Joel");
    System.out.println("ITERANDO NOS MAPS");
    for (Map.Entry<Integer,String> pair : peoples.entrySet()) {
        System.out.println(pair.getKey());
        System.out.println(pair.getValue());
    }
    System.out.println("ITERANDO NOS MAPS 2");
    Iterator it4 = peoples.entrySet().iterator();
    while (it4.hasNext()) {
        Map.Entry iterando = (Map.Entry)it4.next();
        System.out.println(iterando.getKey() + " = " + iterando.getValue());
        it4.remove(); // avoids a ConcurrentModificationException
    }
    System.out.println("ITERANDO NOS MAPS 3");
    peoples.keySet().forEach(id -> {
        System.out.println(peoples.get(id));
    });
    System.out.println("outros formatos de loops:");
    peoples.keySet().forEach(System.out::println);
    peoples.values().forEach(System.out::println);
    peoples.entrySet().forEach(System.out::println);