توفّر حلقة for-each آلية لتنفيذ كتلة من الكود لكل عنصر في مجموعة.
وتشير بعض الوثائق (مثل وثائق Oracle) إليها باسم حلقات for المحسّنة.
إليك الصياغة العامة:
for(declaration: collection) {
body;
}
يعلن declaration المتغير المستخدم لحمل القيم المُسنَدة من المجموعة.
ويكون collection مصفوفة أو مجموعة تحمل القيم التي ستُسند إلى متغير الحلقة.
ويحتوي body على العبارات التي ستُنفَّذ مرة واحدة لكل قيمة في المجموعة.
على سبيل المثال:
char[] vowels = {'a', 'e', 'i', 'o', 'u'};
for(char vowel: vowels) {
System.out.println(vowel);
}
وهذا ما يُخرجه:
a
e
i
o
u
بشكل عام، تُفضَّل حلقة for-each على حلقة for للأسباب التالية:
for-each التكرار على جميع القيم.for-each أكثر تصريحية، بمعنى أن الكود يعبّر عن ماذا يفعل بدلًا من كيف يفعله.for-each محكمة ضد الأخطاء، أما مع حلقات for فيسهل الوقوع في خطأ الفرق بمقدار واحد (فكّر في استخدام < مقابل <=).for-each مع جميع أنواع المجموعات، بما فيها تلك التي لا تدعم استخدام فهرس للوصول إلى العناصر (مثل Set).