guricode

자주쓰는 메서드 체이닝 본문

앱/Flutter&Dart

자주쓰는 메서드 체이닝

agentrakugaki 2025. 6. 24. 21:19

map() + where

숫자 리스트의 각 요소에 2를 곱한 후, 5보다 큰 값들만 반환하고 싶은 경우

List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = numbers
  .map((number) => number * 2)
  .where((number) => number > 5);
print(result); // (6, 8, 10, 12, 14, 16, 18, 20)
  • map()으로 숫자들을 2배 처리했다.
  • where()으로 5보다 큰 값만 필터링했다.

정리

  • 필터링이 필요할 때: where() 사용
  • 각각을 변환할 때: map() 사용

where() + map() + reduce()

짝수만 골라 제곱한 후, 그 값을 모두 더하고 싶은 경우

List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = numbers
  .where((number) => number.isEven)
  .map((number) => number * number)
  .reduce((a, b) => a + b);
print(result); // 220
  • 짝수 필터: where()
  • 제곱 변환: map()
  • 합산 처리: reduce()

 where() + map()

문자열 중 글자 수가 5보다 많은 것만 골라 모두 대문자로 바꾸고 싶은 경우

List<String> words = ['apple', 'orange', 'watermelon', 'pineapple'];
var result = words
  .where((word) => word.length > 5)
  .map((word) => word.toUpperCase());
print(result); // (ORANGE, WATERMELON, PINEAPPLE)
  • 길이 조건 필터: where()
  • 대문자 변환: map()

where() + reduce()

짝수만 골라 모두 더하고 싶은 경우

List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = numbers
  .where((number) => number % 2 == 0)
  .reduce((a, b) => a + b);
print(result); // 30

5보다 작은 숫자만 골라 모두 곱하고 싶은 경우

List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = numbers
  .where((number) => number < 5)
  .reduce((a, b) => a * b);
print(result); // 24

where() + map() + fold()

양수만 골라 10을 더한 후, 전체 합을 구하고 싶은 경우

List<int> numbers = [-10, 20, -30, 40, 50];
var result = numbers
  .where((number) => number > 0)
  .map((number) => number + 10)
  .fold(0, (a, b) => a + b);
print(result); // 140
  • where()로 양수 필터링했다.
  • map()으로 각각에 10을 더했다.
  • fold()로 누적합을 구했다. 초기값이 있어 빈 리스트여도 에러가 발생하지 않는다.

 

  • 필터를 한다 → where()
  • 각각 뭘 해야 한다 → map()
  • 더하거나 누적 값을 만든다 → reduce() 또는 fold()

이처럼 고차 함수들을 메서드 체이닝 방식으로 연결하면, 중간 변수 없이도 깔끔하게 원하는 작업을 처리할 수 있다. 어떤 순서로 어떤 함수를 사용하면 되는지 익숙해지는 것이 중요하다.