Scalaのコレクション機能(拡張)

1.ファスナー(ジッパー)

そして、2のセットは、二重の組み合わせのファスナーエレメントで使用することができます

Demo_031 {オブジェクト
  DEFメイン(:配列[文字列]引数):単位= { 
    ヴァルLIST1 =リスト(1、2、3)
    ヴァルLIST2 =一覧(4、5、6)
    ヴァルLIST3 = list1.zip(LIST2)// (1,4)、(2,5)、(3,6)
    のprintln( "LIST3 =" + LIST3)
  } 
}

  輸出

 注意事項

  • ファスナーの複合操作を組み合わせ要素の各々は、デュアルタプルで、本質的に2つのセットです。
  • 図の運用ルール:

  • 2は、コレクションの数に対応しない場合は、データの損失を引き起こす可能性があります。
  • 任意のセットは、他のセットのアレイとすることができるようなリストに
  • デュアルそれぞれのデータタプルを組み合わせた場合、通過できる取られます
用(項目<-list3){ 
  プリント(item._1 + "" + item._2)//、方法タプルに除去することができるときに削除    
}

  

2.反復子(イテレータ)

 収集サイクルを通しておよび発現のために横断しながら、iteratorメソッドによって設定されたイテレータを得ます

 

 

 例:

{Demo_032オブジェクト
  DEFメイン(引数:配列[文字列]):単位は= { 
    (1、2、。3 ,. 4 ,. 5)ヴァルイテレータ一覧=を与える.iterator //イテレータ
    のprintln(「-------- -----------------トラバーサル。1 ") 一方(iterator.hasNext){ 
      のprintln(Iterator.next())
    } 
    のprintln("トラバーサル-------- 2 -----------------実施形態「)
    イテレータ){ - (列挙<ため
      のprintln(列挙)// 
    } 
  } 
}

3.フロー(流れ)

 ストリームはコレクションです。使用している場合、それはダイナミックな生産、ルールに従うことが怠惰なロードされた最後の要素(このセットは、要素の無限の数を格納するために使用することができますが、それが出て一時間内の要素の無限の数を生成しますが、範囲の多くを使用する必要はありませんでしょう)

 

動的に新しい要素によって生成されたルールのセットをストリーミングするために、尾を使用して、

{Demo_033オブジェクト
  DEFメイン(引数:配列[文字列]):単位= { 
    DEF numsForm(N:のBigInt):ストリーム【のBigInt] :: =#N-numsForm(N-+ 1)
    ヴァルnumsForm STREAM1 =(1)
    のprintlnを(STREAM1 )// 
    //最初の要素を取る
    のprintln( "ヘッド=" + stream1.headは)// 
    のprintlnを(stream1.tail)//注意使用不能stream.last、無限ループまたは入る
    のprintln(STREAM1)// 
  } 
}

  業績

 

例:使用マップのマッピング要素ストリームといくつかの計算

オブジェクトDemo_034 { 
  DEFメイン(引数:配列[文字列]):単位= { 
    DEF numsForm(N:のBigInt):ストリーム【のBigInt] = N#:: numsForm(N + 1)
    デフマルチ(X:のBigInt):のBigInt = { 
      X * X 
    } 
    のprintln(numsForm(5).MAP(マルチ))//!(25 ,?)
  } 
}

  輸出

4.ビュー(ビュー)

 遅延ロード特性をストリーミングするだけでなく、アプリケーションビューの方法の他のセットと同様の効果を得ることができ、それは以下の特徴を有します。

  • プロセスを表示常に怠惰な実行であることのセットをもたらしました。
  • ビューがキャッシュされていない場合は、データは、このようなビューを横断として、たびに再計算されます。

 例:逆の順序で1-100、番号を検索してくださいし、数自体はすべて同じ?。(12、11、22、33···)

Demo_035 {オブジェクト
  DEFメイン(:配列[文字列]引数を):単位= { 
    DEF(Iする:INT):eqでブール= { 
      i.toString.equals(i.toString.reverse)
    } 
    //说明:没有の使用ビュー
    ヴァルviewSquares1 = .filter(EQ)(1〜100)
    のprintln(viewSquares1)
    //使用ビュー
    (1〜100)のVal viewSquares2 = .view.filter(EQ)
    のprintln(viewSquares2)
  } 
}

  出力

並列のセット

 

 アプリケーションの    並列

  • 印刷1-5
Demo_036 {オブジェクト
  デフメイン(引数を:配列[文字列]):単位= { 
    DEF法(I:INT):単位= { 
       印刷( "\ tの" + I)
    } 
    .foreach(方法)(1〜5)
    のprintln( )
    5(1)。PAR .foreach(方法)//并行方式输出

  } 
}

  輸出

 

  •  コレクション要素へのアクセス並列スレッドを見ます
    ヴァルの結果1 = .MAP(0〜100){ケース_ => Thread.currentThread.getName} 
    ヴァル結果2 =(0〜100).par.map {ケース_ => Thread.currentThread.getName} 
    のprintln(結果1)
    のprintln(結果2)

  

おすすめ

転載: www.cnblogs.com/cosmos-wong/p/11441029.html