1
resposta

Foreach no map

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);
1 resposta

Olá Jade, tudo bem?

É que vc está removendo os elementos do Set no segundo laço:

it4.remove(); //vilão!

Espero ter ajudado e bons estudos!

Nico