新Java8 4フォーク/参加するクラスおよびオプションを備え

java8平行()およびシーケンシャル()の後に平行流れと平行に切り替えられます
パッケージ化ストリームを、

輸入java.time.Duration。
輸入java.time.Instant;
輸入java.util.concurrent.ForkJoinPool;
輸入java.util.concurrent.ForkJoinTask;
輸入java.util.concurrent.RecursiveTask;
輸入java.util.stream.LongStream; 

/ ** 
 * @autour ZDC 
 * @Create 2020-03-24-23:53 
 * / 
パブリック クラス ForkJoinCaculateは拡張 RecursiveTask <ロング> { 

    プライベート 静的 最終 長い serialVersionUIDの= 1222222Lをプライベートロングスタート。
    民間 長い終わり。
    プライベート 静的 長い THESHOLD = 10000L 

    公共 ForkJoinCaculate(ロング開始、長い端){
         この .start = 始めます。
        この .END = 終わり。
    } 

    @Overrideは、
    保護されたロング計算(){
         長い長さ=エンド開始し、
        もし(長さ< THESHOLD){
             長い和= 0 ロング ; I <= END; iは=起動I ++ ){ 
                合計 + = I。
            } 
            戻り値の和。
        } 
        { 
            ロング半ば =(+端を開始)/ 2 
            ForkJoinCaculateは左 = 新しいForkJoinCaculate(スタート、途中の); 
            left.fork(); 
            ForkJoinCaculate右 = 新しい ForkJoinCaculate(ミッド+ 1 、エンド)。
            right.fork(); 
            リターン left.join()+ right.join(); 
        } 
    } 

    パブリック 静的 ボイドメイン(文字列[]引数){ 
        インスタントスタート = Instant.now()。

        ForkJoinPoolプール= 新しいForkJoinPool()。
        ForkJoinTask <ロング>タスク= 新しい ForkJoinCaculate(0リットル、10億リットル); 
        ロング合計 = pool.invoke(タスク)。
        System.out.println(合計)。

        インスタント端 = Instant.now()。

        System.out.println(Duration.between(開始、終了).toMillis())。

        インスタントSTART1 = Instant.now()。
        合計 = 0リットル以下のために(ロングiが0リットル=; I <=10億リットル; I ++ ){ 
            合計 + = I。
        } 
        のSystem.out.println(合計)。

        END1インスタント = Instant.now(); 
        のSystem.out.println(Duration.between(START1、END1).toMillis()); 

        // パラレル()およびシーケンシャル()はjava8後パラレルフローストリームと並列に切り替えられる
        ロング SUM1 = LongStream .rangeClosed(0、1000000000).reduce(0 、ロング:: SUM);
         ロング。LongStream.rangeClosed SUM2 =(0、1000000000).PARALLEL()を小さく(0 、ロング:: SUM);
         ロング SUM3 = LongStream.rangeClosed (0、1000000000).sequential()を低減(0 、ロング:: SUM)
        のSystem.out.println(SUM2); 

    } 

}

オプショナル

@Test
     公共 無効Test3は(){ 

        // 任意の容器はすぐにNullPointerException NullPointerExceptionがトラブルを避けるにロックすることができます


        省略可能 <人> OP = Optional.of(新しい新しい人( "ZZZ"、33は、445Dを));
         // オプションの<人> Optional.of OP1 =(NULL); //は異常報告

        オプションの <人を> Optional.empty OP3 =(); //は空のインスタンスを作成
         // するSystem.out.println(op3.getを() ); // 異常報告

        // オブジェクトのインスタンスを作成ヌル上を通過ヌルは、複合体の構築と空上を通過する 
        オプションOP4 = Optional.ofNullable <人>(NULL ;)
        オプション(<人> OP5 = Optional.ofNullable 新しい新人物( "ZZ"、22,11.3 )); 


        IF (op3.isPresent()){ 
            するSystem.out.println( "op3w空でない" ); 
        } { 
            するSystem.out.println( "nulll" ); 
        } 

        // 戻りヌル値にOP3はorElse(T T)指定された 
        人物ZZZ = op3.orElse(新しい新規人物( "ZZZ"、22であり、22.2 ;))

        // Sの戻り値にorElseGet(サプライヤ複数) 
        OP3。 orElseGet(人:: 新新); // nullのコンストラクタの引数を返すため、サプライヤーインターフェース


        // 地図のプロセスであれば、その値 
        省略可能<文字列> op5.map S =(P - > p.getName()); 

        / / flatMap復帰オプション
        任意の<string> S1 = op5.flatMap(P - > Optional.of(p.getName()))。
    }

nullポインタ例外を解決します:

パッケージ化ストリームを、

/ ** 
 * @autour ZDC 
 * @Create 2020-03-25-01:00 
 * / 
パブリック クラス犬{
     プライベート文字列のボール。

    パブリック犬(){ 
    } 

    公共犬(文字列のボール){
         この .ball = ボール。
    } 

    パブリック文字列getBall(){
         戻りボール。
    } 

    パブリック 静的 ボイドメイン(文字列[]引数){ 
        犬の犬 = 新しい犬()。
        dog.getBall(); 
        // 发生空指针异常
        System.out.println(dog.getBall()の長さ()。)。
        // 解决方法
        であれば(!犬= ヌル){ 
            String型ボール = dog.getBall();
            もし(!ボール= ヌル
                のSystem.out.println(ball.length()); 
        } 
    } 
}

オプションを交換しました

パッケージ化ストリームを、

輸入javax.swing.text.html.Option。
輸入java.util.Optional; 

/ ** 
 * @autour ZDC 
 * @Create 2020-03-25-01:00 
 * / 
パブリック クラス犬{
     // 注意!!! 
    プライベートオプション<文字列>ボール= Optional.empty(); 

    パブリック犬(){ 
    } 

    公共犬(オプションの<string> ボール){
         この .ball = ボール。
    } 

    パブリックオプションの<string> getBall(){
         戻りボール。
    } 

    公共の 静的な 無効メイン(文字列[]引数){ 
        オプション <犬>犬= Optional.ofNullable(NULL )。
        文字列s = dog.orElse(新しい犬())getBall()orElse( "默认的球"。。); 
        System.out.println(S); 


    } 
}

 

おすすめ

転載: www.cnblogs.com/zdcsmart/p/12563590.html