// 코드 58-1: 컬렉션 순회하기 - 더 나은 방법이 있습니다.
for (Iterator<Element> i = c.iterator(); i.hasNext(); ) {
Element e = i.next();
... // e로 무언가를 한다.
}
// 코드 58-2: 배열 순회하기 - 더 나은 방법이 있습니다.
for (int i = 0; i < a.length; i++) {
... // a[i]로 무언가를 한다.
}
// 코드 58-3: 컬렉션과 배열을 순회하는 올바른 관용구
for (Element e : elements) {
... // e로 무언가를 한다.
}
// 코드 58-4: 잘못된 예시
for (Iterator<Suit> i = suits.iterator(); i.hasNext(); )
for (Iterator<Rank> j = ranks.iterator(); j.hasNext(); )
deck.add(new Card(i.next(), j.next()));
바깥 컬렉션의 반복자가 너무 많이 호출되어 어느게 어떤건지 알기가 힘들다.
이를 해결하기 위해 for-each 문을 사용한다.
// 코드 58-7: 중첩된 for-each 문
for (Suit suit : suits)
for (Rank rank : ranks)
deck.add(new Card(suit, rank));
파괴적인 필터링(Destructive Filtering)
remove
메서드를 사용해야한다.Collection
의 removeIf
메서드를 사용하여삭제되는 조건을 줄 수 있다.
// removeIf 메서드 사용 예시
elements.removeIf(element -> element 조건);
변형(Transforming)
for (int i = 0; i < list.size(); i++) {
list.set(i, 새로운 값);
}
병렬 반복(Parallel Iteration)
for (int i = 0; i < list1.size(); i++) {
// list1[i]와 list2[i]를 동시에 처리
}