Java for, foreach, Java8 Stream API에서의 반복문 알아보기

Java에서 반복하여 값을 처리하는 for, foreach, 더 나아가 Stream API에서의 반복문 알아보도록 하겠습니다.

기본적인 for문

반복적으로 증가하는 변수 ‘i’를 이용하여 직접 리스트에서 값을 가져옵니다.
반복 상한수를 직접 정해줘야 하여 ArrayIndexOutOfBoundsException가
일어날 가능성이 있으므로 리스트 순회할때 사용은 비추천합니다.

List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// 각 요소에 *2를 하는 for문 사용예제
for (int i = 0; i < integers.size(); i++) {
    int x = integers.get(i) * 2;
    System.out.println(x);
}

확장 for문, foreach

확장for문, foreach등으로 불리우며 해당 데이터의 처음부터 끝까지 순회하며 값을 가져옵니다.
반복상한수를 직접 정할 필요가없어 ArrayIndexOutOfBoundsException를 방지할수있습니다.

List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// for (변수타입 변수명 : 반복할 대상)
for (Integer integer : integers) {
    int x = integer * 2;
    System.out.println(x);
}

Java8 Stream API이용

일반 for문을 쓸때보다 간결해지고, 코드 가독성도 향상됩니다.
무엇보다 메서드 체이닝을 통한 연산과 출력 부분을 분리할수있고 가독성이 향상됩니다.

List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

integers.stream()
.map(i -> i * 2) // 각 요소에 * 2를 한다.
.forEach(System.out::println); // 값을 하나씩 출력한다.

reduce()를 사용하여 각요소를 더하여 하나의 값으로 누적하기(모든값 더하기)

List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

integers.stream()
.reduce((i, i2) -> i + i2);

sorted()를 사용하여 역순으로 정렬하고 출력하기

List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

integers.stream()
.sorted(Comparator.reverseOrder())
.forEach(System.out::println);

IntStream을 통해서 값을 생성할수도 있습니다.

IntStream.rangeClosed(1, 10)
.map(i -> i * 2)
.forEach(System.out::println);