[SCALA] 무엇 컬렉션에 대한 전망은 때 당신이 그들을 사용할까요?
SCALA무엇 컬렉션에 대한 전망은 때 당신이 그들을 사용할까요?
스칼라에서 컬렉션의 많은 (모든?) 유형의 당신은보기를 만들 수 있습니다.
정확히 어떤 도면이다하고있는 목적은 전망 유용?
해결법
-
==============================
1.뷰는 컬렉션의 비 엄격한 버전입니다. 요소가없는 정상 간절히 컬렉션으로 액세스에서 계산되는이 방법.
뷰는 컬렉션의 비 엄격한 버전입니다. 요소가없는 정상 간절히 컬렉션으로 액세스에서 계산되는이 방법.
예를 들어 다음과 같은 코드를 가지고 :
val xs = List.tabulate(5)(_ + 1) val ys = xs.view map { x => println(x); x * x }
그냥이 아무것도 인쇄되지 않습니다 그러나 목록에있는 모든 액세스는 계산을 수행하고 값을 출력합니다, ys.head에 즉 모든 호출은 인쇄되는 일이 발생할 것입니다. 당신이 컬렉션의 엄격한 버전을하려면 다시 그것에 힘을 호출 할 수 있습니다. 이 경우에는 모든 숫자가 인쇄 볼 수 있습니다.
당신이 계산하는 비싼 값 컬렉션을 통과해야하고 한 번에 하나 개의 값을 필요로 할 때 뷰에 대한 하나 개의 사용이다. 또한 뷰는 또한 평가 요소를 캐시 것이다 그들에 toStream를 호출하여 게으른 시퀀스를 만들 수 있습니다.
-
==============================
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.스칼라 2.8 컬렉션 API의 조회수를 참조하십시오.
스칼라 2.8 컬렉션 API의 조회수를 참조하십시오.
-
==============================
4.보기는하지만 메모리를 저장하기위한, 게으른 계산에 사용됩니다.
보기는하지만 메모리를 저장하기위한, 게으른 계산에 사용됩니다.
당신이 콜렉션에 대한 뷰를 만들 때, 메모리는 이미가 죽으면 수집을 할당하고있다.
발보기 = 범위 (1,9) .view와 뷰를 만들 때. 그것은 말하자면, 범위 (1,1000000000), OOM는 피할 수없는 너무 큰 경우, 컬렉션은 이미 메모리를 할당 된
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
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라의 동적 유형의 실제 사용 (0) | 2019.11.26 |
---|---|
[SCALA] 스칼라 소스 코드 변환에 자바를 자동화? [닫은] (0) | 2019.11.26 |
[SCALA] 어떻게 체인 여러 가지에는 InputStream 하나의 InputStream에 (0) | 2019.11.26 |
[SCALA] 어떻게 스칼라에 두 개의 배열을 비교합니까? (0) | 2019.11.26 |
[SCALA] 어떻게 플레이 프레임 워크 선택 쿼리 매개 변수를 처리하는 (0) | 2019.11.26 |