Java 8里 Stream和parallelStream的区别

Posted 那啥快看

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 8里 Stream和parallelStream的区别相关的知识,希望对你有一定的参考价值。

Java中StreamparallelStream,前者是单管,后者是多管,运行时间上做一个小对比,直接上代码:

/**
 * 
 * @author zhangy6
 * <p>对比Stream、parallelStream</p>
 * @date 2017-07-25
 */
public class StreamTest {
    public static void main(String[] args) {
        String path = "pku_training.utf8";
        try {
            List<String> list = IOUtil.readFile2List(path, "utf-8");
            
            long start = System.currentTimeMillis();
            list.stream().
            filter(e -> StringUtils.isNotBlank(e)).
            map(e -> getIdiom(e)).
            collect(Collectors.toList());
            System.out.println("stream : " + (System.currentTimeMillis() - start) + "ms");
            
            start = System.currentTimeMillis();
            list.parallelStream().
            filter(e -> StringUtils.isNotBlank(e)).
            map(e -> getIdiom(e)).
            collect(Collectors.toList());
            System.out.println("parallelStream : " + (System.currentTimeMillis() - start) + "ms");
            
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    private static List<String> getIdiom(String string) {
        String[] array = string.split("\s+");
        List<String> list = Arrays.asList(array);
        
        return list.stream().filter(e -> e.length() == 4).collect(Collectors.toList());
    }
}

 

代码是读取一个分词训练语料,大小7.37MB,然后找出其中四个字的单词/成语,对比一下Stream和ParallelStream运行时间(笔记本win10),结果如下:

stream : 317ms
parallelStream : 90ms

多管就是比单管强很多,线程都不用了。

 

以上是关于Java 8里 Stream和parallelStream的区别的主要内容,如果未能解决你的问题,请参考以下文章

Java函数式编程之Stream流编程

Java 8:用Stream来循环集合

20 个实例玩转 Java 8 Stream,写的太好了!

20 个实例玩转 Java 8 Stream,写的太好了!

Java 8 并行流中的自定义线程池

理解 Java 8 中的 Spliterator、Collector 和 Stream