복붙노트

[SCALA] X의 컬렉션에 옵션 [X]의 스칼라 수집을 변환하는 방법

SCALA

X의 컬렉션에 옵션 [X]의 스칼라 수집을 변환하는 방법

나는 스칼라을 탐험 시작하고, 나는에 관심있어 것들 중 하나는 옵션 유형 및 널 (null) 관련 오류를 제거 할 수있는 약속입니다.

그러나 내가 문자열의 집합으로, 옵션, 말의 목록 (또는 다른 컬렉션) [문자열] 변환하는 방법을 작동 할 수 없었다 (분명히 아무도없는 모든 값을 필터링).

즉, 어떻게이에서받을 수 있나요 :

List[Option[Int]] = List(Some(1))

... 이에:

List[Int] = List(1)

그 대답에 어떤 영향이 있는지 나는 스칼라 2.8을 사용하고 있습니다.

해결법

  1. ==============================

    1.

    val list1 = List(Some(1), None, Some(2))
    val list2 = list1.flatten // will be: List(1,2)
    
  2. ==============================

    2.교육 목적을 위해, 당신은 몇 가지 대안을 좋아 있습니다

    교육 목적을 위해, 당신은 몇 가지 대안을 좋아 있습니다

    scala> val list1 = List(Some(1), None, Some(2))
    list1: List[Option[Int]] = List(Some(1), None, Some(2))
    
    scala> list1 flatten
    res0: List[Int] = List(1, 2)
    
    // Expanded to show the implicit parameter
    scala> list1.flatten(Option.option2Iterable)
    res1: List[Int] = List(1, 2)
    
    scala> list1 flatMap (x => x)
    res2: List[Int] = List(1, 2)
    
    scala> list1 flatMap Option.option2Iterable
    res3: List[Int] = List(1, 2)
    
    // collect is a simultaneous map + filter
    scala> list1 collect { case Some(x) => x }
    res4: List[Int] = List(1, 2)
    

    Scalaz으로, 당신은 그 반환 옵션 [목록 [지능]을 순서라는 약간 다른 작업을 수행 할 수 있습니다.

    scala> import scalaz._; import Scalaz._
    import scalaz._
    import Scalaz._
    
    scala> val list1: List[Option[Int]] = List(Some(1), None, Some(2)) 
    list1: List[Option[Int]] = List(Some(1), None, Some(2))
    
    scala> list1.sequence                                              
    res1: Option[List[Int]] = None
    
    scala> val list2: List[Option[Int]] = List(Some(1), Some(2))         
    list2: List[Option[Int]] = List(Some(1), Some(2))
    
    scala> list2.sequence
    res2: Option[List[Int]] = Some(List(1, 2))
    
  3. from https://stackoverflow.com/questions/4730842/how-to-transform-scala-collection-of-optionx-to-collection-of-x by cc-by-sa and MIT license