Итерация над карта в Java

1. Общ преглед

В тази бърза статия ще разгледаме различните начини за итерация през записите на карта в Java.

Най-просто казано, можем да извлечем съдържанието на карта, използвайки keySet (), valueSet () или entrySet () . Тъй като това са всички набори, подобни принципи на итерация се прилагат за всички тях.

В Map.entrySet API връща колекция изглед на картата, чиито елементи са от Карта клас. Единственият начин да се получи препратка към един запис на карта е от итератора на този изглед на колекция.

T entry.getKey () връща ключа и entry.getValue () връща съответната стойност.

Нека да разгледаме няколко от тях.

2. EntrySet и за Loop

Първо, нека видим как да прегледате карта, като използвате Entry Set :

public void iterateUsingEntrySet(Map map) { for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } }

Тук преобразуваме нашата карта в набор от записи и след това итерираме през тях, използвайки класическия подход за всеки.

Можем да получим достъп до ключ на всеки запис, като извикаме getKey () и можем да получим достъп до стойност на всеки запис, като извикаме getValue ().

3. Итераторът и EntrySet

Друг подход би бил да се получи набор от записи и да се извърши итерацията с помощта на итератор:

public void iterateUsingIteratorAndEntry(Map map) { Iterator
    
      iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); System.out.println(entry.getKey() + ":" + entry.getValue()); } }
    

Забележете как можем да получим екземпляра на Iterator, използвайки итератора () API на entrySet (). След това, както обикновено, обикаляме итератора с iterator.next ().

4. С Lambdas

Нека сега видим как да повторим карта, използвайки ламбда изрази.

Подобно на повечето други неща в Java 8, това се оказва много по-просто от алтернативите; ще използваме метода forEach () :

public void iterateUsingLambda(Map map) { map.forEach((k, v) -> System.out.println((k + ":" + v))); } 

В този случай не е необходимо да преобразуваме карта в набор от записи. За да научите повече за ламбда изразите, можете да започнете от тук.

5. API за поток

API на потока е една от основните характеристики на Java 8 . Можем да използваме тази функция, за да прегледаме и карта , но както в предишните примери, първо трябва да получим набор от записи:

public void iterateUsingStreamAPI(Map map) { map.entrySet().stream() // ... .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue())); } 

Това трябва да се използва, когато планираме да извършим допълнителна обработка на потока . В противен случай това е просто forEach (), както е описано по-горе.

За да научите повече за Stream API, разгледайте тази статия.

6. Заключение

В този урок сме се фокусирали върху проста, но критична операция - итерация през записите на карта.

Видяхме няколко метода, които могат да се използват само с Java 8, а именно ламбда изрази и Stream API.

Както винаги, примерите за кодове в статията могат да бъдат намерени в GitHub.