Scala의 collect λ©”μ„œλ“œλŠ” μ»¬λ ‰μ…˜μ—μ„œ νŒ¨ν„΄ 맀칭을 μ‚¬μš©ν•˜μ—¬ 쑰건에 λ§žλŠ” μš”μ†Œλ₯Ό μ„ νƒν•˜κ³  λ³€ν™˜ν•  λ•Œ μ‚¬μš©ν•˜λŠ” κ³ μ°¨ ν•¨μˆ˜μž…λ‹ˆλ‹€. μ΄λŠ” filter와 map을 κ²°ν•©ν•œ ν˜•νƒœλ‘œ, νŠΉμ • 쑰건에 λ§žλŠ” μš”μ†Œλ₯Ό λ³€ν™˜ν•˜μ—¬ μƒˆλ‘œμš΄ μ»¬λ ‰μ…˜μ„ μƒμ„±ν•©λ‹ˆλ‹€.


collect의 μ£Όμš” νŠΉμ§•

  1. λΆ€λΆ„ ν•¨μˆ˜λ₯Ό 인수둜 μ‚¬μš©:
  2. 필터링 및 λ³€ν™˜:
  3. κ²°κ³Ό μ»¬λ ‰μ…˜:

문법

collection.collect { case pattern if condition => result }

예제

1. 쑰건에 λ§žλŠ” μš”μ†Œ 필터링 및 λ³€ν™˜

val numbers = List(1, 2, 3, 4, 5)

// 2둜 λ‚˜λˆ  λ–¨μ–΄μ§€λŠ” 숫자만 μ„ νƒν•˜κ³ , κ·Έ 숫자λ₯Ό 10배둜 λ³€ν™˜
val result = numbers.collect { case x if x % 2 == 0 => x * 10 }

println(result) // List(20, 40)

2. νŒ¨ν„΄ 맀칭으둜 νŠΉμ • μš”μ†Œ λ³€ν™˜

val data = List("Scala", 123, true, "Java")

// λ¬Έμžμ—΄μΈ μš”μ†Œλ§Œ μ„ νƒν•˜κ³  길이λ₯Ό 계산
val result = data.collect { case s: String => s.length }

println(result) // List(5, 4)

3. Mapμ—μ„œ 쑰건뢀 μΆ”μΆœ