Java 8 Stream(集約操作)の一般的なapiとparallelStreamの主な違い

6560 ワード

        /**
         *   Stream      
         */
        //  
        String[] arr = new String[]{"a", "b", "c"};
        Stream stream = Arrays.stream(arr);
        Stream stream3 = Stream.of(arr);
        //  
        List list = Arrays.asList("a", "b", "c");
        Stream stream1 = list.stream();
        // 
        Stream stream2 = Stream.of("a", "b", "c");

        boolean flag = false;
        ArrayList userList = new ArrayList<>();
        userList.add(new User(3, "wangwu"));
        userList.add(new User(2, "lisi"));
        userList.add(new User(4, "zhaoliu"));
        userList.add(new User(1, "zhangsan"));

        /**
         * Streams  api  
         */
        userList.forEach(user -> System.out.println(user));

        System.out.println("=======================forEach()     =======================");
        userList.stream().forEach(user -> System.out.println(user));

        System.out.println("=======================sorted()   =======================");
        userList.stream().sorted(Comparator.comparing(User::getId)).forEach(user -> System.out.println(user));

        System.out.println("=======================filter()     =======================");
        userList.stream().filter((User user) -> user.getId() != 2).forEach(user -> System.out.println(user));

        System.out.println("=======================limit()    n     1  ,  n=======================");
        userList.stream().limit(1).forEach(user -> System.out.println(user));

        System.out.println("=======================skip()    n    ,   n,   1  =======================");
        userList.stream().skip(1).limit(1).forEach(user -> System.out.println(user));

        if (flag) {
            userList.add(new User(1, "zhangsan"));
            userList.add(new User(1, "zhangsan"));
            userList.add(new User(1, "zhangsan"));
            System.out.println("=======================distinct()           equals hashCode  =======================");
            userList.stream().distinct().forEach(user -> System.out.println(user));
        }

        System.out.println("=======================summaryStatistics()     avg/sum/count/max/min=======================");
        IntSummaryStatistics intSummaryStatistics = userList.stream().mapToInt(user -> user.getId()).summaryStatistics();
        System.out.println("   :" + intSummaryStatistics.getAverage());
        System.out.println("  :" + intSummaryStatistics.getSum());
        System.out.println("  :" + intSummaryStatistics.getCount());
        System.out.println("   :" + intSummaryStatistics.getMax());
        System.out.println("   :" + intSummaryStatistics.getMin());

        System.out.println("=======================map()              ,            =======================");
        List collect = userList.stream().map(user -> user.getUsername()).collect(Collectors.toList());
        collect.stream().forEach(name -> System.out.println(name));
        System.out.println("=======================      :String:toUpperCase        =======================");
        List collect4 = list.stream().map(String::toUpperCase).collect(Collectors.toList());
        collect4.stream().forEach(s -> System.out.println(s));

        System.out.println("=======================flatMap()  Stream              Stream =======================");
        //           Integer    
        Stream> listStream = Stream.of(Arrays.asList(1, 2, 3), Arrays.asList(4, 5));
        //      Stream
        Stream rStream = listStream.flatMap((Function, Stream>) i -> i.stream());
        // Stream    List  
        List collect1 = rStream.collect(Collectors.toList());
        System.out.println("    :" + collect1.size());
        collect1.stream().forEach(i -> System.out.println(i));

        System.out.println("findFirst()         ");
        User user = userList.stream().limit(1).collect(Collectors.toList()).get(0);
        System.out.println(user);
        User user1 = userList.stream().findFirst().get();
        System.out.println(user1);

        /**
         *      
         */
        IntStream.of(new int[]{1, 2, 3, 4}).forEach(i -> System.out.println(i));
        IntStream.range(1, 3).forEach(i -> System.out.println(i));//     
        IntStream.rangeClosed(1, 3).forEach(i -> System.out.println(i));

        /**
         * Stream        
         */
        // String
        String s = Arrays.stream(arr).collect(Collectors.joining()).toString();
        System.out.println(" String:" + s);
        // String  
        String[] objects = Arrays.stream(arr).toArray(String[]::new);
        System.out.println(" String  :" + Arrays.toString(objects));
        // list
        List collect2 = Arrays.stream(arr).collect(Collectors.toList());
        System.out.println(" list:");
        collect2.forEach(s1 -> System.out.println(s1));
        // set
        Set collect3 = Arrays.stream(arr).collect(Collectors.toSet());
        System.out.println(" set:");
        collect3.forEach(s1 -> System.out.println(s1));

        /**
         *  stream parallelStream   :
         *  stream      ,parallelStream      (       )
         *  stream      ,parallelStream      
         *  parallelStream.forEachOrdered       
         *  parallelStream        stream
         */
        String a[] = {"1","2","3","4","5","6"};
        List ints = Arrays.asList(a);
        System.out.println("stream  ");
        ints.stream().forEach(x -> System.out.print(x));//   
        System.out.println("parallelStream  ");
        ints.parallelStream().forEach(x -> System.out.print(x));//   
        System.out.println("parallelStream.forEachOrdered  ");
        ints.parallelStream().forEachOrdered(x -> System.out.print(x));//   

注意:
1.streamのforEachが通常のforサイクルと異なるのは、前者はサイクル内部でcontinueとbreakを使用できないが、returnを使用することができ、その機能は通常のforサイクルのcontinueに等しい