국비

[ 29일차 169~180 ] 수업 정리 - 자바

코딩하는냥이 2025. 5. 26. 15:20
반응형

📌 오전 수업

1. map, mapToInt, boxed, asDoubleStream

  • mapToInt() : 객체 스트림 → 기본형 스트림(IntStream 등) 변환
  • asDoubleStream() : int → double 스트림으로 변환
  • boxed() : 기본형 스트림을 객체 스트림으로 변환

2. flatMap, flatMapToInt

  • 다차원 구조를 평탄화(flatten)
list.stream()
  .flatMap(str -> Arrays.stream(str.split(" ")))
  .forEach(System.out::println);

3. 정렬 (Sorting)

  • sorted() : 기본 정렬 (Comparable 구현 필요)
  • sorted(Comparator) : 사용자 정의 정렬
.sorted((s1, s2) -> Integer.compare(s1.getScore(), s2.getScore()))  // 오름차순
.sorted((s1, s2) -> Integer.compare(s2.getScore(), s1.getScore()))  // 내림차순

4. peek, forEach, sum

  • peek() : 중간 연산으로 디버깅용 출력
  • forEach() : 최종 연산, 직접 실행됨

5. 조건 검사 (Matching)

  • allMatch, anyMatch, noneMatch 를 통해 조건 만족 여부 검사

6. 집계 연산 (Aggregate)

  • count(), sum(), average(), max(), min(), findFirst()

7. OptionalDouble 사용법

  • isPresent() / orElse() / ifPresent() 를 통해 평균값 안전 처리

8. reduce() 연산

  • 누산기를 사용한 수동 합계 계산
.reduce(0, (a, b) -> a + b)

📌 오후 수업

1. collect(toList())

  • 스트림의 결과를 리스트로 수집
List<Student> males = list.stream()
  .filter(s -> s.getSex().equals("남"))
  .toList();

2. collect(Collectors.toMap())

  • 이름과 점수를 키-값 쌍으로 수집
Map<String, Integer> map = list.stream()
  .collect(Collectors.toMap(Student::getName, Student::getScore));

3. collect(Collectors.groupingBy())

  • 성별을 기준으로 학생 그룹핑
Map<String, List<Student>> grouped = list.stream()
  .collect(Collectors.groupingBy(Student::getSex));
  • 이후 남학생/여학생 그룹을 나눠 출력

💡 포인트 정리

  • map, flatMap, sorted, reduce, collect 등은 스트림의 핵심 기능
  • peek()은 중간 디버깅 용도로 사용하며, 반드시 최종 연산과 함께 써야 동작
  • collect()는 스트림 결과를 리스트, 맵, 그룹핑 형태로 수집할 때 사용
  • Optional은 평균값 등 존재할 수도 안 할 수도 있는 결과를 다룰 때 유용

📌 정리하자면, 29일차에는 스트림의 데이터 가공과 수집 능력을 집중적으로 익혔습니다. 실무에서 자주 쓰이는 map, filter, collect, reduce 등의 메서드들을 실제 코드로 다뤄 보며, 데이터 흐름 중심의 프로그래밍 방식에 익숙해지는 시간이었습니다!