Java/자바 정리

179. 스트림 결과 수집하기 – toList()와 Collectors.toMap() 활용

코딩하는냥이 2025. 5. 26. 14:33
반응형

스트림 API를 사용하면 중간 연산 후의 데이터를 리스트나 맵 형태로 수집할 수 있습니다.
이번 예제에서는 filter()를 활용해 조건에 맞는 데이터를 리스트로 수집하고,
Collectors.toMap()을 통해 특정 필드를 맵(Key-Value) 형태로 변환하는 방법을 실습해보겠습니다.


📦 Student.java

package ch17.sec12;

public class Student {
	private String name, sex;
	private int score;

	public Student(String name, String sex, int score) {
		this.name = name;
		this.sex = sex;
		this.score = score;
	}

	public String getName() {
		return name;
	}

	public String getSex() {
		return sex;
	}

	public int getScore() {
		return score;
	}
}

📌 예제 코드

package ch17.sec12;

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

public class CollectExample {
	public static void main(String[] args) {
		List<Student> list = new ArrayList<Student>();
		list.add(new Student("홍길동", "남", 92));
		list.add(new Student("김수영", "여", 87));
		list.add(new Student("감자바", "남", 95));
		list.add(new Student("파이썬", "여", 93));

		// 남학생만 리스트로 수집 후 이름 출력
		list.stream().filter(s -> s.getSex().equals("남")).toList()
			.stream().forEach(s -> System.out.println(s.getName()));
		System.out.println();

		// 이름과 점수를 Map으로 수집
		Map<String, Integer> map = list.stream()
			.collect(Collectors.toMap(
				s -> s.getName(),
				s -> s.getScore()
			));
		System.out.println(map);
	}
}

💻 실행 결과

홍길동
감자바

{홍길동=92, 김수영=87, 감자바=95, 파이썬=93}

💬 코드 설명

  • filter(s -> s.getSex().equals("남"))
    → 성별이 "남"인 학생만 추려냅니다.
  • .toList()
    → 필터링 결과를 새로운 List로 수집합니다. (List<Student>)
  • Collectors.toMap()
    → 이름(getName())을 키, 점수(getScore())를 값으로 하는 Map<String, Integer> 을 생성합니다.
  • 이후 해당 리스트와 맵을 출력하여 원하는 정보를 구조화된 형태로 확인할 수 있습니다.

💡 포인트 정리

  • toList()는 스트림 결과를 다시 리스트로 수집할 때 사용합니다.
  • Collectors.toMap()은 KeyMapper, ValueMapper 두 함수를 사용하여
    객체를 맵 형태로 변환하는 데에 매우 유용합니다.
  • 스트림 결과를 List, Set, Map으로 저장하면
    이후 데이터를 반복 처리하거나 검색하기 쉬워집니다.

📌정리하자면, 이번 예제에서는 스트림으로 필터링한 데이터를 toList()로 리스트로 수집하고,
Collectors.toMap()을 이용해 객체의 필드를 기반으로 맵을 만드는 방법을 배웠습니다.
이처럼 스트림 결과를 자료구조로 다시 수집하는 과정
데이터를 가공한 후 저장하거나 재활용할 때 매우 중요한 패턴입니다.