今天学习到了一个东西, 叫Stream. 是jdk 1.8中新加入的内容. 具体可以分为
- Stream
- IntStream
- LongStream
- DoubleStream
用法都差不多, 下面以IntStream为例, 简单演示下用法
package mainJava;
import java.util.Collections;
import java.util.function.IntSupplier;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
* Created by yanyongjun on 2020/3/16.
*/
public class Main {
public static void main(String[] args) {
IntStream.range(1, 3).forEach(s -> System.out.println(s));
println("------");
IntStream.rangeClosed(1, 3).forEach(s -> System.out.println(s));
println("-------");
IntStream.of(1, 2, 4).forEach(s -> System.out.println(s));
println("------");
IntStream.of(1, 2, 3).map(s -> s * s).forEach(s -> println(s + ""));
println("-----");
IntStream.of(1, 3, 2).sorted().forEach(s -> println(s + ""));
println("----");
IntStream.of(1, 2, 3).filter(s -> s > 2).forEach(s -> println(s + ""));
println("-----");
IntStream.of(1, 3, 4, 5, 6, 7, 8, 9).parallel().forEach(s -> {
println(s + "");
});
println("-----");
IntStream.of(1, 2, 3, 4).reduce((left, right) -> {
println("left:" + left);
println("right:" + right);
return left + right;
}).getAsInt();
}
static void println(String s) {
System.out.println(Thread.currentThread() + " : " + s);
}
}
看一下输出结果
1
2
Thread[main,5,main] : ------
1
2
3
Thread[main,5,main] : -------
1
2
4
Thread[main,5,main] : ------
Thread[main,5,main] : 1
Thread[main,5,main] : 4
Thread[main,5,main] : 9
Thread[main,5,main] : -----
Thread[main,5,main] : 1
Thread[main,5,main] : 2
Thread[main,5,main] : 3
Thread[main,5,main] : ----
Thread[main,5,main] : 3
Thread[main,5,main] : -----
Thread[main,5,main] : 7
Thread[main,5,main] : 6
Thread[ForkJoinPool.commonPool-worker-2,5,main] : 9
Thread[ForkJoinPool.commonPool-worker-2,5,main] : 8
Thread[ForkJoinPool.commonPool-worker-3,5,main] : 3
Thread[ForkJoinPool.commonPool-worker-4,5,main] : 1
Thread[ForkJoinPool.commonPool-worker-1,5,main] : 4
Thread[ForkJoinPool.commonPool-worker-2,5,main] : 5
Thread[main,5,main] : -----
Thread[main,5,main] : left:1
Thread[main,5,main] : right:2
Thread[main,5,main] : left:3
Thread[main,5,main] : right:3
Thread[main,5,main] : left:6
Thread[main,5,main] : right:4
其实可以从方法名上, 就可以看出, Stream的实现借鉴了Rxjava的很多东西, RxJava可以休息了
值得一提的是, 有一个parallel方法, 表示在多线程下实现, 这个比较奇葩, 要注意后面可能有并发问题