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.