Новые функции 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 <Long> { 

    частный  статический  окончательный  длинный serialVersionUID = 1222222L ;
    частный Длинный старт;
    частный длинный конец;
    частный  статический  длинный THESHOLD = 10000L ; 

    общественный ForkJoinCaculate (Long начала, длинный конец) {
         это .start = старт;
        это .end = конец; 
    } 

    @Override 
    защищен Длинный вычислить () {
         длинную длину = КОНЕЦ начала;
        если (длина < THESHOLD) {
             длинная сумма = 0 ;
            для ( длиной I = старт; я <= конец, я ++ ) { 
                сумма + = я;
            } 
            Вернуть сумму; 
        } 
        Иначе { 
            Длинные середины = (начало + конец) / 2 ; 
            ForkJoinCaculate влево = новый ForkJoinCaculate (начало, середина); 
            left.fork (); 
            ForkJoinCaculate право = новый ForkJoinCaculate (середина + 1 , конец); 
            right.fork (); 
            вернуть left.join () + right.join (); 
        } 
    } 

    Общественных  статических  пустот основных (String [] арг) { 
        Немедленный старт = Instant.now (); 

        ForkJoinPool бассейн= Новый ForkJoinPool (); 
        ForkJoinTask <Long> задача = новый ForkJoinCaculate (0L, 1000000000l ); 
        Длинная сумма = pool.invoke (задача); 
        System.out.println (сумма); 

        Мгновенный конец = Instant.now (); 

        System.out.println (Duration.between (начало, конец) .toMillis ()); 

        Мгновенный start1 = Instant.now (); 
        Подводя = 0L ;
        для (Long I = 0L; я <= 1000000000l; я ++ ) { 
            сумма + = я; 
        } 
        System.out.println (сумма);

        END1 Мгновенный = Instant.now (); 
        System.out.println (Duration.between (Start1, END1) .toMillis ()); 

        // Параллельный () и последовательный () включен параллельно с потоком параллельного потока после того, как java8 
        Long SUM1 = LongStream .rangeClosed (0, 1 миллиард) .reduce (0 , Лонг :: SUM);
         Длинный . LongStream.rangeClosed SUM2 = (0, 1 миллиард) .parallel () для уменьшения (0 , Лонг :: SUM);
         Длинный sum3 = LongStream.rangeClosed . (0, 1 миллиард) .sequential () для уменьшения (0 , Лонг :: SUM); 
        System.out.println (SUM2); 

    } 

}

Необязательный

@Test
     общественности  недействительным Test3 () { 

        // Дополнительное судно способно быстро заблокировать NullPointerException NullPointerException избежать неприятностей 


        факультативным <Человек> OP = Optional.of ( новый новый Человек ( "ZZZ", 33 , 445d внешней));
         // Необязательный <Человек> Optional.of OP1 = (нуль); // сообщили ненормальное 

        факультативным <Человек , > Optional.empty OP3 = (); // создать пустой экземпляр
         // System.out.println (op3.get () ); // сообщили ненормальное 

        // перейти Null Null построить экземпляр объекта передается через строительство комплекса и пустые 
        факультативный <Человека , > OP4 = Optional.ofNullable ( нуль ); 
        факультативный <Человека , > OP5 = Optional.ofNullable ( новый новыйЧеловек ( "ZZ", 22,11.3 )); 


        IF (op3.isPresent ()) { 
            System.out.println ( "op3w не пустой" ); 
        } еще { 
            System.out.println ( "nulll" ); 
        } 

        // OP3 возвращать нулевое значение заданного OrElse (Т Т) 
        Лицо ZZZ = op3.orElse ( новый новое лицо ( «ZZZ», 22, 22,2 )); 

        // orElseGet (Поставщик ей) возвращаемое значение ы 
        OP3. orElseGet (Человек :: новый новый ); // возвращает нулевой аргумент конструктора , поскольку интерфейсы Поставщика 


        // Карта процесс , если его значение 
        Необязательного <String> op5.map S = (P -> p.getName ()); 

        / / flatMap возвращение Дополнительно
        Опция <String> s1 = op5.flatMap (р -> Optional.of (p.getName ())); 
    }

Решить исключения нулевого указателя:

пакет потока; 

/ ** 
 * @autour ZDC 
 * @create 2020-03-25-01: 00 
 * / 
общественный  класс Dog {
     частный Струнный мяч; 

    общественные собаки () { 
    } 

    общественного собака (String шар) {
         это .ball = шар; 
    } 

    Публичная строка getBall () {
         возвращение мяч; 
    } 

    Общественности  статической  недействительный основной (String [] арг) { 
        собака собака = новый Dog (); 
        dog.getBall (); 
        // 发生空指针异常
        System.out.println (dog.getBall () длина ().);
        // 解决方法
        если (собака! = NULL ) { 
            Строка шар = dog.getBall ();
            если (шар! = NULL ) 
                System.out.println (ball.length ()); 
        } 
    } 
}

Дополнительно заменить

пакет потока; 

импорт javax.swing.text.html.Option;
импорт java.util.Optional; 

/ ** 
 * @autour ZDC 
 * @create 2020-03-25-01: 00 
 * / 
общественного  класса Dog {
     // 注意!!! 
    частный Необязательный <String> шар = Optional.empty (); 

    общественные собаки () { 
    } 

    общественного Собака (Необязательно <String> шар) {
         это .ball = шар; 
    } 

    Общественного Дополнительно <String> getBall () {
         возвращение мяч; 
    } 

    Общественности  статической  недействительнымОсновной (String [] арг) { 
        Дополнительно <Dog> собаки = Optional.ofNullable ( нуль ); 
        Указатель на строку = dog.orElse ( новый . Собака ()) getBall () OrElse ( "默认的球". ); 
        System.out.println (ы); 


    } 
}

 

рекомендация

отwww.cnblogs.com/zdcsmart/p/12563590.html