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