Как работает цикл java for each

Начиная с Java 8, вы можете перебирать список или любую коллекцию без использования какого-либо цикла в Java. Новый класс Stream предоставляет метод forEach (), который используется для циклического перебора всех или выбранных элементов списка и карты.

Метод forEach() имеет ряд преимуществ по сравнению с традиционным циклом for, например, вы можете выполнять его параллельно, просто используя параллельный поток вместо обычного потока. Поскольку вы работаете в потоке, он также позволяет фильтровать и сопоставлять элементы. Как только вы закончите с фильтрацией и отображением, вы можете использовать forEach() для работы над ними.

Вы даже можете использовать ссылку на метод и лямбда-выражение внутри метода forEach (), что приведет к более четкому и лаконичному коду. Давайте рассмотрим несколько примеров forEach() в Java 8.

Как использовать метод forEach() в Java 8

Теперь, когда вы немного знаете о методе forEach() и Java 8, пришло время ознакомиться с некоторыми примерами кода и подробнее изучить метод forEach() в JDK 8.

Итерация по всем элементам списка с помощью forEach()

Вы можете циклически перебирать все элементы, используя итерацию.МетодforEach (), как показано ниже:

List<String> alphabets
= new ArrayList<>(Arrays.asList(«aa», «bbb», «cat», «dog»)); alphabets.forEach(s ->System.out.println(s));

Этот код будет печатать каждый элемент списка, называемый алфавитами. Вы даже можете заменить лямбда-выражение ссылкой на метод, потому что мы передаем лямбда-параметр как он есть методу
System.out.println (), как показано ниже:

alphabets.forEach(System.out::println);

Теперь давайте посмотрим, хотите ли вы добавить запятую между двумя элементами, то вы можете сделать это с помощью лямбда-параметров, как показано в следующем примере:

alphabets.forEach(s ->System.out.print(s + «,»));

Кстати, теперь вы не можете использовать ссылку на метод, потому что мы делаем что-то с лямбда-параметрами. Давайте рассмотрим еще один пример метода forEach() для выполнения фильтрации элементов. Если вы хотите узнать больше о циклах в Java, Полный мастер-класс Java-это самый полный курс для Java-программистов.

Пример filter и forEach()

Одной из главных особенностей Stream API является его способность фильтровать элементы на основе некоторых условий. Мы уже видели проблеск мощной функции Stream API в моем предыдущем посте, как использовать Stream API в Java 8, здесь мы увидим ее снова, но в контексте метода forEach ().

Давайте теперь будем печатать только элементы, начинающиеся с «a», следующий код сделает это за вас, startWith () — это метод класса String, который возвращает true, если String начинается со строки «a», или возвращает false. Как только список будет отфильтрован, метод forEach() выведет все элементы, начинающиеся со строки «a», как показано ниже:

alphabets.()
.filter(s ->s.StartsWith(«a»))
.forEach(System.out::println);

Это же круто, правда? Вы можете запросто читать код, это гораздо проще, чем использовать итератор или любой другой способ циклического перебора списка в Java.

Теперь давайте отфильтруем то, что имеет длину больше 2, для этого мы можем использовать функцию length() класса String:

alphabets.()
.filter(s ->s.length() > 2)
.forEach(System.out::println);

Помимо forEach, это также хороший пример использования метода filter в Java 8 для фильтрации или выбора подмножества элементов из потока. Вы можете прочитать больше об этом в Сборниках для потоков в Java 8, используя курс Лямбда-выражений на Pluralsight, который дает подробное объяснение новых функций Java 8.

Пример forEach() и map()

Пока у вас есть как базовый, так и продвинутый пример использования метода forEach (), сначала с простой итерацией по каждому элементу, а затем с использованием метода filter (), Давайте рассмотрим еще один пример метода forEach() вместе с функцией map (), которая является еще одной ключевой функциональностью Stream API.

Метод map() Java 8 позволяет преобразовывать один тип в другой, например, в нашем первом примере мы используем map() для преобразования списка строк в список целых чисел, где каждый элемент представляет длину строки. Теперь давайте выведем длину каждой строки с помощью функции map() :

alphabets.()
.mapToInt(s ->s.length())
.forEach(System.out::println);

Как насчет вычисления суммы длины всех строк? вы можете сделать это с помощью операций сгиба, таких как sum (), как показано в следующем примере:

alphabets.()
.mapToInt(s ->s.length())
.сумма();

Это были некоторые из распространенных, но очень полезных примеров метода forEach() Java 8, нового способа циклического перебора списка в Java. Если вы чувствуете ностальгию, то не забудьте про путешествие forloop в Java, краткое изложение forloop от JDK 1 до JDK 8.

Если вы хотите узнать больше о функциональном программировании в Java 8 и использовании методов map, flatmap, то я предлагаю вам пройти курс Learn Java Functional Programming with Lambdas&Streams на Udemy. Это хороший курс, наполненный хорошими примерами для изучения ключевых функций Java 8.

Программа для использования функции forEach() в Java 8

importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.List;

/**
* Java-программа, показывающая, как использовать оператор forEach() в Java8.
* Вы можете зацикливаться на списке, наборе или любой коллекции, используя это
* метод. Вы даже можете сделать фильтрацию и преобразование и
* может запускать цикл параллельно.
*
*/
public class Java8Demo {

public static void main(String args[]) {

List<String> alphabets = new ArrayList<>(
Массивы.asList(«aa», «bbb», «cac», «dog»));

// цикл по всем элементам с использованием Iterable.МетодforEach()
alphabets.forEach(s ->System.out.println(s));

// Вы даже можете заменить лямбда-выражение ссылкой на метод
// потому что мы передаем лямбда-параметр как он есть в
// метод
alphabets.forEach(System.out::println);

// вы даже можете что-то сделать с лямбда-параметром, например, добавить запятую
alphabets.forEach(s ->System.out.print(s + «,»));

// В классе Stream есть еще один метод forEach (), который работает
// onstream и позволяет использовать различные методы потока, например фильтр()
// map() etc

alphabets.stream().forEach(System.out::println);

// давайте теперь будем печатать только вязы, которые начинаются с «а»
alphabets.()
.filter(s ->s.StartsWith(«a»))
.forEach(System.out::println);

// давайте отфильтруем только то, что имеет длину больше 2
alphabets.()
.filter(s ->s.length() > 2)
.forEach(System.out::println);

// теперь давайте напечатаем длину каждой строки с помощью map()
alphabets.()
.mapToInt(s ->s.length())
.forEach(System.out::println);

// как насчет вычисления суммы длины всей строки
alphabets.()
.mapToInt(s ->s.length())
.sum();

}

}

Разница между циклами for и foreach

Цикл for

Цикл for — это общая структура повторения. Это помогает перебирать оператор или набор операторов в программе. Синтаксис цикла for выглядит следующим образом:

for(инициализация; тестовое выражение; обновление выражения){
// код внутри цикла for

}

Цикл Foreach

Цикл foreach — это удобный способ извлечения элементов массива или коллекции. Он может быть использован в качестве альтернативы циклу fora. Он называется циклом foreach, потому что он перебирает каждый элемент массива или коллекции. Синтаксис цикла foreach выглядит следующим образом:

for(тип данных item: collection){

//код внутри каждого цикла

}

Важные вещи, которые нужно помнить:

  1.  forEach () — это терминальная операция, которая означает, что после вызова метода forEach() в потоке вы не можете вызвать другой метод. Это приведет к исключению времени выполнения.
  2. Когда вы вызываете forEach() в параллельном потоке, порядок итерации не гарантируется, но вы можете обеспечить этот порядок, вызвав метод forEachOrdered ().
  3. В Java 8 есть два метода forEach (), один из которых определен внутри Iterable, а другой-внутри класса java.util.stream.Stream. Если целью forEach() является просто итерация, то вы можете напрямую вызвать ее, как list.forEach() или set.forEach (), но если вы хотите выполнить некоторые операции, такие как фильтр или карта, то лучше сначала получить поток, а затем выполнить эту операцию и, наконец, вызвать метод forEach ().
  4. Использование forEach() приводит к читабельному и более чистому коду.

Вот и все о том, как использовать forEach() в Java 8. Следуя этим примерам, вы можете легко ускорить работу с использованием метода forEach (). Он идеально подходит для использования вместе с потоковым и лямбда-выражением и позволяет писать код без циклов на Java.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *