Итерация по коллекции в Java

В этом руководстве по коллекциям 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());}
Прокрутить вверх