16Lazy,函式,並行

2021-10-02 22:26:48 字數 1799 閱讀 5433

新增到變數之前,做到延遲載入,只有呼叫的時候才會執行計算。

類似於單例中的懶漢模式--> 不呼叫方法之前物件是不存在的。

1-構造方法私有化(無參)

2-建立乙個靜態私有變數資料型別是當前類的資料型別且不進行初始化

3-提供乙個公有靜態的獲取當前物件的方法

4-進行判斷, 若當前物件沒有被建立, 建立物件, 否則返回

def init():string=

lazy val method = init() //有無lazy關鍵字,結果不同

println("初始化方法呼叫之後")

println(method)

}

通過par開啟多個執行緒同時進行計算(開啟多執行緒)

* spark**的使用本地執行setmaster("local")

* local---開啟乙個執行緒;

* local[2]---模擬spark並行化處理(開啟兩個執行緒),最好小於當前電腦空餘執行緒的個數;

* local[*]---有多少執行緒就用多少執行緒。

遍歷集合,將集合中的資料進行相加求和。

//求和(聚合)

val arr = array(1,2,3,4,5,6,7,8)

val sumed:int = arr.sum

//並行化處理求和(多個執行緒同時計算,最後彙總)

val sumed2:int = arr.par.sum

聚合函式,需要傳入乙個能計算集合中資料的函式作為引數,預設reduce會獲取集合中元素的資料型別,

作為其泛型的資料型別。求和可以使用並行化,但是**求差值的時候不能使用平行計算**。

reduceleft,reduceright:正向相加,反向相加

//單執行緒

val sumed3 = arr.reduce(_+_)

//reduce並行化

val sumed3 = arr.par.reduce((x:int,y:int)=>x+y)

val sumed3 = arr.par.reduce(_+_)

//reduce也可求差值

val sumed3 = arr.reduce(_-_)

//求差的並行化處理,結果就不一定了,所以不要使用

//reduceleft是reduce的變種,處理函式是相同的,添不新增並行都一樣

//這個求差值的時候可以使用並行化

val sumed4 = arr.par.reduceleft(_-_)

//和reduceleft相似,reduceright反向進行運算,從右向左加

val sumed5 = arr.par.reduceright(_+_)

摺疊,可以聚合,初始值(無特定順序)

需要傳入兩個引數, 第乙個是初始化值, 第二個是計算規則。

//若是不開啟並行化,最終就是初始值加計算結果

val sumed5 = arr.fold(0)(_+_)

//若開啟並行化,每個執行緒都會加一遍初始值

val sumed6 = arr.par.fold(10)(_+_)

//有初始值有特定順序(相當於單執行緒)

val sumed7 = arr.par.foldleft(10)(_+_)

val sumed8 = arr.par.foldright(10)(_+_)

初始值,區域性聚合,全域性聚合

arr.aggregate(0)(_+_,_+_)

c autofac建構函式中lazy延遲載入例項

但是,如果某個controller中有很多業務邏輯,就需要注入許多倉庫例項,有些action或許只是用到其中一兩個倉庫例項而已,這樣就造成了資源浪費,影響載入速度等缺點。構造方法注入 如下 private readonly lazyadmindomrepository private readonl...

函式習題1 6

1.寫兩個函式,分別求兩個整數的最大公約數和最小公倍數,用主函式呼叫這兩個函式 並輸出結果,兩個整數由鍵盤輸入。include include int main 最大公約數 int greatest common divisor int num one,int num two 2.求方程ax 2 b...

C 筆記1 6 函式

在定義函式時函式名後面括號中的變數名稱為形式引數 formal parameter,簡稱形參 在主調函式中呼叫乙個函式時,函式名後面括號中的引數 可以是乙個表示式 稱為實際引數 actual parameter,簡稱實參 形參不佔儲存單元。實參與形參,個數相等,型別匹配。呼叫函式在main函式之後要...