构造IntStream
IntStream.generate() 产生一个无限流,这里需要传入一个IntSupplier函数式接口实例 。
IntStream.range()产生指定区间的有序IntStream,这里需要传入一个区间(左闭右开),产生的元素不包含最后一个。
IntStream.rangeClosed()产生指定区间的有序IntStream,与IntStream.range()不同的是,产生的元素包含最后一个,即左闭右闭。
IntStream.of()填充一个或多个int元素构造流。
IntStream.empty()产生一个空元素的流。
IntStream.builder()会产生一个builder用于构建stream,通过builder的add方法添加元素,build方法构造流。
IntStream.iterate()产生一个有序的无限流,需要传入初始值,对元素操作的函数。
IntStream.concat() 将两个流合并成一个流。
过滤IntStream
filter() 根据条件过滤元素
转换IntStream
map() 产生的仍然是IntStream,可以对元素进行数学上的操作,加减乘除等等
mapToObj()转成对象流,例如String等
mapToLong()转成long类型流
mapToDouble()转成double类型流
asLongStream()快速转成Long类型的Stream
asDoubleStream()快速转成Double类型的Stream
使用IntStream
//构造6个线程
IntStream.range(0, 5).boxed().map(i->new Thread(()->System.out.println(Thread.currentThread().getName()))).forEach(Thread::start);
//定义2个线程,并保存在threads中,源码见我的博客Thread
List<Thread> threads= IntStream.range(1, 3).mapToObj(ThreadJoin::create).collect(toList());
//只输出5以上的元素
IntStream.of(1, 5, 3, 7, 8, 3, 5, 6).filter(e -> e >= 5).forEach(System.out::println);
//将每个元素都变成之前的2倍
IntStream.of(1, 2, 3).map(e -> e * 2).forEach(System.out::println);
//对象转换
IntStream.of(1, 2, 3).mapToObj(String::valueOf).map(Object::getClass).forEach(System.out::println);