복붙노트

[SCALA] 무엇 컬렉션에 대한 전망은 때 당신이 그들을 사용할까요?

SCALA

무엇 컬렉션에 대한 전망은 때 당신이 그들을 사용할까요?

스칼라에서 컬렉션의 많은 (모든?) 유형의 당신은보기를 만들 수 있습니다.

정확히 어떤 도면이다하고있는 목적은 전망 유용?

해결법

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

    1.뷰는 컬렉션의 비 엄격한 버전입니다. 요소가없는 정상 간절히 컬렉션으로 액세스에서 계산되는이 방법.

    뷰는 컬렉션의 비 엄격한 버전입니다. 요소가없는 정상 간절히 컬렉션으로 액세스에서 계산되는이 방법.

    예를 들어 다음과 같은 코드를 가지고 :

    val xs = List.tabulate(5)(_ + 1)
    val ys = xs.view map { x => println(x); x * x }
    

    그냥이 아무것도 인쇄되지 않습니다 그러나 목록에있는 모든 액세스는 계산을 수행하고 값을 출력합니다, ys.head에 즉 모든 호출은 인쇄되는 일이 발생할 것입니다. 당신이 컬렉션의 엄격한 버전을하려면 다시 그것에 힘을 호출 할 수 있습니다. 이 경우에는 모든 숫자가 인쇄 볼 수 있습니다.

    당신이 계산하는 비싼 값 컬렉션을 통과해야하고 한 번에 하나 개의 값을 필요로 할 때 뷰에 대한 하나 개의 사용이다. 또한 뷰는 또한 평가 요소를 캐시 것이다 그들에 toStream를 호출하여 게으른 시퀀스를 만들 수 있습니다.

  2. ==============================

    2.당신이 요소 변환의 첫 번째 결과를 수집 할 필요가있을 때 하나의 사용 사례는 다음과 같습니다

    당신이 요소 변환의 첫 번째 결과를 수집 할 필요가있을 때 하나의 사용 사례는 다음과 같습니다

        case class Transform(n: Int) { println("Transform "+n)}
        val list = List(1,2,3,4,5)
        list.view.map(v => Transform(v)).collectFirst{case Transform(3) => println("found")}
    

    인쇄물:

    Transform 1
    Transform 2
    Transform 3
    found
    

    동안:

        list.map(v => Transform(v)).collectFirst{case Transform(3) => println("found")}
    

    인쇄물:

    Transform 1
    Transform 2
    Transform 3
    Transform 4
    Transform 5
    found
    
  3. ==============================

    3.스칼라 2.8 컬렉션 API의 조회수를 참조하십시오.

    스칼라 2.8 컬렉션 API의 조회수를 참조하십시오.

  4. ==============================

    4.보기는하지만 메모리를 저장하기위한, 게으른 계산에 사용됩니다.

    보기는하지만 메모리를 저장하기위한, 게으른 계산에 사용됩니다.

    당신이 콜렉션에 대한 뷰를 만들 때, 메모리는 이미가 죽으면 수집을 할당하고있다.

    발보기 = 범위 (1,9) .view와 뷰를 만들 때. 그것은 말하자면, 범위 (1,1000000000), OOM는 피할 수없는 너무 큰 경우, 컬렉션은 이미 메모리를 할당 된

  5. from https://stackoverflow.com/questions/3361478/what-are-views-for-collections-and-when-would-you-want-to-use-them by cc-by-sa and MIT license