java8之Spliterator

基本用法:

import java.util.Arrays;
import java.util.Spliterator;
import java.util.stream.IntStream;

public class SpliteratorTest {
    /**
     * Spliterator是将一个stream进行对半平分的操作类
     * 
     * Arrays.parallelSetAll 和 IntStream.range可以生成一个指定长度Int的Stream
     * 
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        int[] array = new int[10];
        Arrays.parallelSetAll(array, i -> i);
        
        // 这个方法也可以构建一个Stream,然后再构建Spliterator
        Spliterator.OfInt test = IntStream.range(0, 10).spliterator();
        test.forEachRemaining((int value) -> {
            System.out.println(Thread.currentThread().getName() + "--" + value);
        });
        System.out.println("+++++++++++");
        
        Spliterator.OfInt sp = Arrays.spliterator(array);
        // 分割完后sp还剩5个元素,sp1也是5个元素
        Spliterator.OfInt sp1 = sp.trySplit();
        // 分割完后sp1为3个,sp2为2个
        Spliterator.OfInt sp2 = sp1.trySplit();
        
        sp1.forEachRemaining((int value) -> {
            System.out.println(Thread.currentThread().getName() + "--" + value);
        });
        
        System.out.println("------------");
        
        sp2.forEachRemaining((int value) -> {
            System.out.println(Thread.currentThread().getName() + "--" + value);
        });
        
        System.out.println("------------");
        
        sp.forEachRemaining((int value) -> {
            System.out.println(Thread.currentThread().getName() + "--" + value);
        });
    }
}

运行结果:

main--0
main--1
main--2
main--3
main--4
main--5
main--6
main--7
main--8
main--9
+++++++++++
main--2
main--3
main--4
------------
main--0
main--1
------------
main--5
main--6
main--7
main--8
main--9

 

posted @ 2019-06-06 16:19  自行车上的程序员  阅读(3987)  评论(0编辑  收藏  举报