티스토리 뷰

🍀 Spring Boot

stream(), map(), collect()

James Wetzel 2025. 2. 18. 14:54
728x90
반응형

Java Stream API에서 stream(), map(), collect() 함수는 함수형 프로그래밍 패러다임을 활용하여 데이터를 처리할 때 사용됩니다. 이를 하나씩 설명해 드리겠습니다.


1. stream()

stream() 메서드는 Java의 컬렉션(Collection)에서 스트림(Stream)을 생성하는 역할을 합니다.

  • 스트림은 컬렉션의 요소를 하나씩 순회하면서 함수형 스타일로 처리할 수 있도록 합니다.
  • 스트림은 원본 컬렉션을 변경하지 않고 데이터를 처리할 수 있습니다.
List<String> names = List.of("Alice", "Bob", "Charlie");
Stream<String> nameStream = names.stream();  // 스트림 생성

2. map()

map() 메서드는 스트림의 각 요소를 변환(매핑) 하는 역할을 합니다.

  • 기존 요소를 원하는 형태로 변경할 때 사용됩니다.
  • 람다 표현식 또는 메서드 참조를 활용할 수 있습니다.
  • 변환된 결과를 포함하는 새로운 스트림을 반환합니다.
List<String> names = List.of("Alice", "Bob", "Charlie");

List<Integer> nameLengths = names.stream()
        .map(String::length)  // 각 이름의 길이로 변환
        .collect(Collectors.toList()); 

System.out.println(nameLengths); // [5, 3, 7]

예제 분석

  • "Alice" → 5, "Bob" → 3, "Charlie" → 7
  • map(String::length)을 사용하여 문자열을 정수(길이)로 변환
  • 변환된 요소들을 collect(Collectors.toList())로 리스트로 변환

3. collect()

collect() 메서드는 스트림의 결과를 컬렉션(Collection)이나 기타 형태로 변환하는 역할을 합니다.

  • Collectors.toList(), Collectors.toSet(), Collectors.toMap() 등 다양한 변환 방식이 존재합니다.
List<String> names = List.of("Alice", "Bob", "Charlie");

Set<String> uppercaseNames = names.stream()
        .map(String::toUpperCase)  // 대문자로 변환
        .collect(Collectors.toSet()); // Set으로 변환

System.out.println(uppercaseNames); // [ALICE, BOB, CHARLIE]

4. 질문 코드 분석

roles.stream()
     .map(role -> new SimpleGrantedAuthority(role.name()))
     .collect(Collectors.toSet());
  • roles.stream() → roles 컬렉션을 스트림으로 변환
  • map(role -> new SimpleGrantedAuthority(role.name()))
    • role.name()을 호출하여 String 권한 이름을 가져옴
    • 이를 SimpleGrantedAuthority 객체로 변환
  • collect(Collectors.toSet())
    • 변환된 SimpleGrantedAuthority 객체들을 Set으로 수집

예제 가정

List<Role> roles = List.of(new Role("ADMIN"), new Role("USER"));

Set<SimpleGrantedAuthority> authorities = roles.stream()
        .map(role -> new SimpleGrantedAuthority(role.name()))
        .collect(Collectors.toSet());

System.out.println(authorities); // [ADMIN, USER]

결과

  • Role("ADMIN") → SimpleGrantedAuthority("ADMIN")
  • Role("USER") → SimpleGrantedAuthority("USER")
  • 최종적으로 Set<SimpleGrantedAuthority>로 변환

정리

메서드 설명

stream() 컬렉션에서 스트림을 생성
map() 각 요소를 변환
collect() 변환된 스트림을 컬렉션으로 변환

 

728x90
반응형