JAVA

[JAVA] List 자주 사용하는 유틸리티 메서드와 트릭

인생아 2024. 11. 21. 22:31
반응형

Java에서 리스트(List)를 활용한 프로그래밍은 매우 빈번하며, 효율적으로 데이터를 다루기 위해 유틸리티 메서드와 트릭을 사용하는 것이 중요합니다.

1. List 병합과 필터링

리스트 데이터를 합치거나 특정 조건에 따라 필터링하는 작업은 데이터 처리에서 매우 자주 사용됩니다. Java Stream API를 활용하면 효율적으로 구현할 수 있습니다.

List 병합

리스트 병합은 두 개 이상의 리스트를 하나로 합치는 작업입니다. 이 작업은 Stream.concat() 또는 addAll() 메서드를 통해 간단히 구현할 수 있습니다.

예제 코드 - 병합

import java.util.ArrayList;
import java.util.List;

public class ListMergeExample {
    public static void main(String[] args) {
        List<String> firstList = new ArrayList<>();
        firstList.add("서울");
        firstList.add("부산");

        List<String> secondList = new ArrayList<>();
        secondList.add("대구");
        secondList.add("인천");

        // addAll() 활용
        List<String> mergedList = new ArrayList<>(firstList);
        mergedList.addAll(secondList);
        System.out.println("병합된 리스트: " + mergedList);
    }
}

List 필터링

리스트 필터링은 조건에 따라 필요한 데이터를 걸러내는 작업입니다. Stream API의 filter()를 사용하면 간결하게 구현할 수 있습니다.

예제 코드 - 필터링

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

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

        // 필터링: 이름이 '대'로 시작하는 도시만 선택
        List<String> filteredCities = cities.stream()
                                            .filter(city -> city.startsWith("대"))
                                            .collect(Collectors.toList());
        System.out.println("필터링된 리스트: " + filteredCities);
    }
}

병합과 필터링은 대용량 데이터 처리에서도 중요한 역할을 합니다. 병합된 데이터를 적절히 필터링하여 원하는 결과를 얻을 수 있습니다.

반응형

2. 서브 리스트 생성 (subList)

subList() 메서드는 리스트의 특정 구간만 가져올 때 사용됩니다. 이는 대규모 데이터를 구간별로 나눠 처리하거나, 페이징(paging) 기능을 구현할 때 유용합니다.

사용법

  • List.subList(int fromIndex, int toIndex): 지정된 시작 인덱스와 끝 인덱스 사이의 요소를 반환합니다.
  • 반환된 서브 리스트는 원본 리스트의 뷰(view)로 작동합니다.

예제 코드

import java.util.ArrayList;
import java.util.List;

public class SubListExample {
    public static void main(String[] args) {
        List<String> names = new ArrayList<>();
        names.add("홍길동");
        names.add("이순신");
        names.add("유관순");
        names.add("안중근");
        names.add("김구");

        // 특정 범위의 서브 리스트 생성
        List<String> subList = names.subList(1, 4); // 1번부터 3번까지
        System.out.println("서브 리스트: " + subList);
    }
}

주의사항: subList()로 생성된 리스트를 수정하면 원본 리스트에도 영향을 미칩니다. 이러한 특성을 알고 신중히 사용해야 합니다.

3. List 데이터를 랜덤하게 섞기 (Collections.shuffle)

Collections.shuffle() 메서드는 리스트 데이터를 무작위로 섞는 데 사용됩니다. 게임, 데이터 샘플링, 무작위 배치를 구현할 때 유용합니다.

사용법

  • Collections.shuffle(List list): 리스트 요소를 무작위로 섞습니다.

예제 코드

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ShuffleExample {
    public static void main(String[] args) {
        List<String> students = new ArrayList<>();
        students.add("홍길동");
        students.add("이순신");
        students.add("유관순");
        students.add("안중근");

        System.out.println("원본 리스트: " + students);

        // 무작위로 섞기
        Collections.shuffle(students);
        System.out.println("섞인 리스트: " + students);
    }
}

랜덤 섞기 활용 사례

  1. 퀴즈 앱: 정답 순서를 섞을 때 사용
  2. 로또 번호 생성기: 임의의 숫자를 생성
  3. 게임 배치: 플레이어 순서를 랜덤으로 결정

정리

  • List 병합필터링은 대규모 데이터 관리 및 정제에서 중요한 역할을 합니다.
  • subList()는 데이터의 특정 구간을 효과적으로 관리할 때 유용합니다.
  • Collections.shuffle()은 무작위성이 필요한 다양한 시나리오에서 필수적입니다.

참고 사이트

반응형