Kategorie
Java Nauka programowania

[JAVA] Ściąga ośmiu sposobów iteracji po mapach.

W tym wpisie opiszę sposoby iteracji po mapach w formie szybkiej ściągi 🙂

Oczywiście istnieje o wiele więcej sposobów. Można np. użyć Apache Collections. Ja wybrałem te podstawowe mieszczące się w „fabrycznym” API Javy 🙂

Na początku dane wejściowe:

Map<String, Integer> someCollection = new HashMap<>();
        someCollection.put("key1", 100);
        someCollection.put("key2", 200);
        someCollection.put("key3", 300);
        someCollection.put("key4", 400);

Sposób pierwszy: iteracja za pomocą Iteratora i Map.Entry (statycznego interfejsu wewnętrznego interfejsu Map). Poniżej wersja z pętlą while:

Iterator<Map.Entry<String, Integer>> it = someCollection.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, Integer> pair = it.next();
            System.out.println(pair.getKey() + " " + pair.getValue());
        }

Sposób drugi: wersja intercji za pomocą Map.Entry w pętli foreach:

for (Map.Entry<String, Integer> pair : someCollection.entrySet()) {
            System.out.println(pair.getKey() + " " + pair.getValue());
        }

Sposób trzeci: z użyciem pętli foreach przy pomocy lambd:

someCollection.forEach((k, v) -> System.out.println(k + " " + v));

Sposób czwarty: z użyciem metody .keySet() w pętli foreach:

for (String key : someCollection.keySet()) {
          System.out.println(key + " " + someCollection.get(key));
      }

Sposób piąty: za pomocą metody .keySet().iterator() z iteratorem

Iterator<String> it = someCollection.keySet().iterator();
      while (it.hasNext()) {
          String key = it.next();
          System.out.println(key + someCollection.get(key));
      }

Sposób szósty: za pomocą standardowej pętli for oraz Map.Entry

for (Iterator<Map.Entry<String, Integer>> entries = someCollection.entrySet().iterator(); entries.hasNext(); ) {
          Map.Entry<String, Integer> entry = entries.next();
          System.out.println(entry.getKey() + " " +  entry.getValue());
      }

Sposób siódmy: za pomocą strumieni dany z Javy 8 Stream API

someCollection.entrySet().stream().forEach(e -> System.out.println(e.getKey() + " " +  e.getValue()));

Sposób ósmy: wersja z Javą 8 i Stream API parallel

someCollection.entrySet().stream().parallel().forEach(e -> System.out.println(e.getKey() + " " +  e.getValue()));

Poniżej całość kodu w klasie Main:

public class Main {

  public static void main(String[] args) {

    /** dane wejściowe*/
    Map<String, Integer> someCollection = new HashMap<>();
    someCollection.put("key1", 100);
    someCollection.put("key2", 200);
    someCollection.put("key3", 300);
    someCollection.put("key4", 400);


    /** sposób pierwszy*/
    Iterator<Map.Entry<String, Integer>> it = someCollection.entrySet().iterator();
    while (it.hasNext()) {
      Map.Entry<String, Integer> pair = it.next();
      System.out.println(pair.getKey() + " " + pair.getValue());
    }

    /** sposób drugi*/
    for (Map.Entry<String, Integer> pair : someCollection.entrySet()) {
      System.out.println(pair.getKey() + " " + pair.getValue());
    }

    /** sposób trzeci*/
    someCollection.forEach((k, v) -> System.out.println(k + " " + v));


    /**sposób czwarty*/
      for (String key : someCollection.keySet()) {
          System.out.println(key + " " + someCollection.get(key));
      }

      /**sposób piąty*/
      Iterator<String> it2 = someCollection.keySet().iterator();
      while (it2.hasNext()) {
          String key = it2.next();
          System.out.println(key + someCollection.get(key));
      }

      /**sposób szósty*/
      for (Iterator<Map.Entry<String, Integer>> entries = someCollection.entrySet().iterator(); entries.hasNext(); ) {
          Map.Entry<String, Integer> entry = entries.next();
          System.out.println(entry.getKey() + " " +  entry.getValue());
      }

      /** sposób siódmy*/
      someCollection.entrySet().stream().forEach(e -> System.out.println(e.getKey() + " " +  e.getValue()));

      /** sposób ósmy*/
      someCollection.entrySet().stream().parallel().forEach(e -> System.out.println(e.getKey() + " " +  e.getValue()));
      
  }

}

Chętnie uzupełnię ten wpis o inne sposoby, które ty znasz lub na co dzień używasz. Daj mi znać w komentarzu, a umieszczę Twoje rozwiązania w tym wpisie 🙂