В этом руководстве по коллекциям Java демонстрируются различные методы итерации по коллекциям Java(список, набор и карта) с использованием цикла for, расширенного цикла for, итератора и потока Java 8.
1. Итерация по списку
В следующих примерах показано, как перебирать элементы списка в Java.
Благодаря последним тенденциям в кодировании использование потоков позволяет нам беспрепятственно перебирать элементы списка, выполнять операции над элементами и собирать результаты.
Список список = Список.of("A", "B", "C", "D");список.поток()//другие операции по мере необходимости.forEach(System.out::println);
Этот метод, недавно представленный в Java 8, может быть вызван для любого Iterable и принимает один аргумент, реализующий функциональный интерфейс java.util.function.Consumer.
Список список = Список.of("A", "B", "C", "D");список.forEach(System.out::println);
Расширенный цикл for также является отличным способом итерации по списку и создает читаемый код.
Список список = Список.of("A", "B", "C", "D");для(Строка s : список) {System.out.println(s);}
Итератор, возвращаемый методом List.iterator(), предоставляет методы hasNext() и next(), которые могут помочь последовательно обойти элементы списка.
Список список = Список.of("A", "B", "C", "D");Итератор itr = list.iterator();пока(itr.hasNext()) {System.out.println(itr.next());}
И последнее, но не менее важное: для обхода элементов списка можно использовать и традиционный цикл for.
Список список = Список.of("A", "B", "C", "D");для( int i=0; i < list.size(); i++ ) {System.out.println(list.get(i));}
2. Итерация по набору
Тип Set очень похож на тип List, за исключением:
- Набор не допускает дублирования элементов.
- Set не предоставляет метод get() для извлечения элемента с использованием индекса.
Таким образом, мы можем повторно использовать методы итерации List с Set также. Только традиционный цикл for не может быть использован из-за недоступности доступа на основе индексов.
Set<String> set = Set.of("A", "B", "C", "D");//Streamset.stream()//other operation as needed.forEach(System.out::println);//Iterable.forEach()set.forEach(System.out::println);//Enhanced for-loopfor(String s : set) {System.out.println(s);}//IteratorIterator<String> itr1 = set.iterator();while(itr1.hasNext()) {System.out.println(itr1.next());}
3. Итерация по карте
Карта хранит пары ключ-значение. Ключи уникальны, и каждое значение связано с одним ключом. Мы можем перебирать ключи и значения, как в карте.
3.1. Итерация по ключам
Метод Map.keySet() возвращает набор ключей в карте, поэтому мы можем использовать методы, применимые для набора, для итерации по ключам в карте.
Map<String, Integer> map = Map.of("A", 1, "B", 2, "C", 3);//Streammap.keySet().stream().forEach(System.out::println);//Iterable.forEach()map.keySet().forEach(System.out::println);//IteratorIterator<String> keysItr = map.keySet().iterator();while(keysItr.hasNext()) {System.out.println(keysItr.next());}
3.2. Итерация по значениям
Метод Map.values() возвращает список значений в карте, поэтому мы можем использовать методы, применимые к списку, для итерации по ключам в карте.
Map<String, Integer> map = Map.of("A", 1, "B", 2, "C", 3);//Streammap.values().stream().forEach(System.out::println);//Iterable.forEach()map.values().forEach(System.out::println);//IteratorIterator<Integer> valuesItr = map.values().iterator();while(valuesItr.hasNext()) {System.out.println(valuesItr.next());}
3.3. Итерация по записям
Метод Map.entrySet() возвращает набор экземпляров Map.Entry из карты, чтобы мы могли использовать методы, применимые к набору, для итерации по записям в карте.
Map<String, Integer> map = Map.of("A", 1, "B", 2, "C", 3);//Streammap.entrySet().stream().forEach(System.out::println);//Iterable.forEach()map.entrySet().forEach(System.out::println);//IteratorIterator <Map.Entry<String, Integer>> entryIterator = map.entrySet().iterator();while(entryIterator.hasNext()) {System.out.println(entryIterator.next().getKey());System.out.println(entryIterator.next().getValue());}