1. 程式人生 > >Java 8裏 Stream和parallelStream的區別

Java 8裏 Stream和parallelStream的區別

encoding collector 很多 col util trac 對比 == 區別

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的區別