JAVA

[JAVA] List 반복문을 활용한 처리

인생아 2024. 11. 17. 21:45
반응형

Java에서 List 데이터 처리는 다양한 반복문과 도구를 활용하여 효율적으로 수행할 수 있습니다. 여기서는 for와 for-each 반복문, Iterator와 ListIterator, 그리고 Stream API를 활용한 함수형 프로그래밍을 다룹니다. 각 방식의 장단점을 비교하며 Java 반복문 활용법, List 데이터 처리와 같은 검색어를 자연스럽게 포함해 설명합니다. 예제 코드는 한글 데이터를 사용하여 실용성을 높였습니다.

1. for와 for-each 반복문

for 반복문for-each 반복문은 Java에서 가장 기본적인 반복문입니다.

for 반복문

인덱스를 기반으로 반복할 때 사용되며, 특정 인덱스에 접근하거나 변경 작업을 수행하기에 적합합니다.

예제

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("사과");
        fruits.add("바나나");
        fruits.add("포도");

        // for 반복문
        for (int i = 0; i < fruits.size(); i++) {
            System.out.println((i + 1) + "번째 과일: " + fruits.get(i));
        }
    }
}

출력 결과

 
1번째 과일: 사과
2번째 과일: 바나나
3번째 과일: 포도

for-each 반복문

컬렉션의 모든 요소를 순회할 때 사용하며, 코드가 간결합니다. 수정이 아닌 읽기 작업에 적합합니다.

예제

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> cities = new ArrayList<>();
        cities.add("서울");
        cities.add("부산");
        cities.add("대구");

        // for-each 반복문
        for (String city : cities) {
            System.out.println("도시 이름: " + city);
        }
    }
}

출력 결과

 
도시 이름: 서울
도시 이름: 부산
도시 이름: 대구

비교

  • for 반복문: 인덱스에 접근 가능, 요소 수정이 용이
  • for-each 반복문: 코드 간결성, 요소 순회에 적합
반응형

2. Iterator와 ListIterator의 사용법

Iterator는 컬렉션 요소를 순회하는 표준 방식입니다. ListIteratorList에 특화된 확장 기능을 제공합니다.

Iterator

Iterator는 요소를 하나씩 순회하며, 요소 삭제에 적합합니다.

예제

import java.util.ArrayList;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> animals = new ArrayList<>();
        animals.add("고양이");
        animals.add("강아지");
        animals.add("토끼");

        // Iterator 사용
        Iterator<String> iterator = animals.iterator();
        while (iterator.hasNext()) {
            String animal = iterator.next();
            if (animal.equals("강아지")) {
                iterator.remove(); // 강아지 제거
            }
        }

        System.out.println("남은 동물: " + animals);
    }
}

출력 결과

남은 동물: [고양이, 토끼]

ListIterator

ListIterator양방향 탐색요소 수정을 지원합니다.

예제

import java.util.ArrayList;
import java.util.ListIterator;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> colors = new ArrayList<>();
        colors.add("빨강");
        colors.add("파랑");
        colors.add("노랑");

        // ListIterator 사용
        ListIterator<String> listIterator = colors.listIterator();
        while (listIterator.hasNext()) {
            String color = listIterator.next();
            if (color.equals("파랑")) {
                listIterator.set("초록"); // "파랑"을 "초록"으로 수정
            }
        }

        System.out.println("변경된 색상 목록: " + colors);
    }
}

출력 결과

변경된 색상 목록: [빨강, 초록, 노랑]

비교

  • Iterator: 요소 삭제에 적합, 단방향 탐색
  • ListIterator: 양방향 탐색 및 수정 가능

3. Stream API를 활용한 함수형 프로그래밍

Stream API데이터 필터링, 매핑, 정렬을 간결하게 처리하는 함수형 프로그래밍 도구입니다.

Stream의 기본 사용

예제

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);

        // Stream 사용
        List<Integer> doubled = numbers.stream()
                                       .map(n -> n * 2)
                                       .collect(Collectors.toList());

        System.out.println("두 배가 된 값: " + doubled);
    }
}

출력 결과

두 배가 된 값: [20, 40, 60]

고급 예제: 필터링과 정렬

예제

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("이민수");
        names.add("김철수");
        names.add("박영희");

        // 이름 정렬 및 "김"씨 필터링
        List<String> sortedKimNames = names.stream()
                                           .filter(name -> name.startsWith("김"))
                                           .sorted()
                                           .collect(Collectors.toList());

        System.out.println("김씨 성을 가진 정렬된 이름: " + sortedKimNames);
    }
}

출력 결과

김씨 성을 가진 정렬된 이름: [김철수]

비교

  • for/for-each 반복문: 간단한 작업에 적합
  • Iterator/ListIterator: 요소 삭제, 양방향 탐색에 유용
  • Stream API: 필터링, 정렬 등 복잡한 데이터 처리에 최적화

참고 사이트

Java 공식 문서: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

반응형