转自:https://www.cnblogs.com/tietazhan/p/7486244.html
JDK8新特性,stream相关操作。把集合转换成stream,再对其进行相关操作,加上lambada表达式。
demo:
1 2 3 4 5 6 7 8 9 10 |
|
1 |
|
执行结果:
1 2 |
|
集合元素分组收集,用字符串长度进行分组:
1 2 3 |
|
执行结果:
1 |
|
集合的forEach:
1 2 3 4 |
|
执行结果:
1 2 3 4 |
|
max和min函数,返回最值:
1 2 3 4 5 |
|
返回的max为list最大值。max可以调用get()函数,但是如果list为空,则max()返回的就是null,那直接使用get就会报错,但是JDK8改动后,orElse(null),表示如果对象为空,就返回null,不会报错。
平行流,就是把集合的个元素开多线程去处理:
1 2 3 4 5 6 7 8 9 |
|
执行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
parallel执行是使用 ForkJoinPool的线程池,ForkJoinPool的最大线程数是CPU数-1,如果算上当前线程,则会有CPU数量的线程数执行任务。
集合的合并,把多个集合合并成一个集合并进行操作:
1 2 3 4 5 6 7 8 |
|
执行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
上面一个执行语句是普通流操作,下面一个语句是平行流(parallel)操作。
1 |
|
stream还有很多操作
Optional<T> findFirst(); //返回stream的第一个
Optional<T> findAny(); //随机返回一个
Stream<T> of(T... values) ; //传入多个