JAVA

[JAVA Stream API] 컬렉션 프레임워크에 적용

곽코딩루카 2024. 11. 14. 11:31
반응형

Java의 Stream API와 람다식의 조합은 리스트나 컬렉션을 더 쉽게 다루기 위해 도입되었습니다. 익숙해지면 데이터를 필터링하거나 변환, 수집하는 등의 작업을 간결하게 처리할 수 있습니다. 아래에 기본 구조와 함께 자주 쓰이는 연산을 소개해 볼게요.

1. Stream의 기본 구조

Stream API는 리스트, 배열 등 컬렉션 데이터를 일련의 연산으로 처리할 수 있도록 도와줍니다. .stream()을 호출하면, 해당 리스트는 스트림이 되어 여러 단계로 연산이 가능해집니다. 일반적인 구조는 다음과 같습니다:

list.stream()
        .중간 연산1()
.중간 연산2()
...
        .최종 연산();

 

  • 중간 연산: filter, map, sorted 등 데이터를 변환하거나 필터링합니다.
  • 최종 연산: collect, forEach, count 등 스트림을 최종적으로 처리하고 결과를 반환합니다.

2. 람다식

람다식은 익명 함수 형태로, 간단하게 말하면 메서드의 내용을 한 줄로 표현하는 방식입니다. 이로 인해 코드가 매우 간결해지며, Stream에서 많은 연산이 람다식을 받아 다양한 처리가 가능해집니다.

람다식의 기본 구조는 (매개변수) -> { 표현식 }이며, 매개변수에 대해 단일 명령문이 있을 때는 중괄호 { }를 생략할 수도 있습니다. 예를 들어,

list.stream().filter(s -> s.startsWith("A")).collect(Collectors.toList());
 

위는 s.startsWith("A")가 참인 요소만 필터링하고 새 리스트로 수집합니다.

3. Stream과 람다식을 사용한 예시

  1. 필터링: 리스트에서 특정 조건을 만족하는 요소만 남기는 방법입니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> result = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); // 결과: ["Alice"]
  1. 매핑: 리스트의 각 요소를 변환하는 방법입니다.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = names.stream() .map(name -> name.length()) .collect(Collectors.toList()); // 결과: [5, 3, 7]
  1. 정렬: 스트림의 요소를 특정 기준으로 정렬합니다.
     
     
List<String> names = Arrays.asList("Charlie", "Alice", "Bob");
List<String> sortedNames = names.stream() .sorted() .collect(Collectors.toList()); // 결과: ["Alice", "Bob", "Charlie"]
  1. 그룹화: 예를 들어, 사람들의 리스트에서 나이를 기준으로 그룹화할 수 있습니다.
List<Person> people = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25), new Person("Charlie", 30) );
Map<Integer, List<Person>> peopleByAge = people.stream() .collect(Collectors.groupingBy(Person::getAge)); // 결과: {30=[Alice, Charlie], 25=[Bob]}

4. 스트림의 주요 메서드와 사용법

  • filter: 조건을 만족하는 요소만을 추출합니다.
  • map: 각 요소를 변환합니다.
  • distinct: 중복을 제거합니다.
  • sorted: 요소를 정렬합니다.
  • collect: 스트림의 요소들을 모아서 리스트나 맵 등으로 변환합니다.

스트림과 람다식을 사용하는 가장 큰 이유는 가독성과 간결함입니다. 익숙해지면 훨씬 직관적으로 데이터를 처리할 수 있으며, 불필요한 반복문을 제거하여 더 직관적으로 데이터를 다룰 수 있습니다.

반응형