一、stream介绍
1、基础用法
遍历
bookList
.stream().forEach(book
->System
.out
.println(book
.getId()));
过滤并统计数量
bookList
.stream().filter(book
-> "1".equals(book
.getType())).mapToInt(Book
::getQuantity
).sum()
List转换成Map
List
<Book> bookList
= new ArayList<>();
bookList
.stream().collect(Collectors
.toMap(Book
::getId
, Function
.identity()));
二、parallelStream并行
1、基础使用
package com
.cf
.example
.java
.java8
.stream
;
import java
.util
.ArrayList
;
import java
.util
.List
;
public class ParallelStreamUse {
public static void main(String
[] args
) {
List
<String> stringList
= new ArrayList() {{
add("1");
add("2");
add("3");
add("4");
add("5");
}};
stringList
.parallelStream().forEach(string
-> {
System
.out
.println(Thread
.currentThread().getName() + "\t" + string
);
});
}
}
2、并发(线程池)设置
parallelStream并行,底层实现采用ForkJoin,线程池大小默认为:cpu核心数
获取cpu核心数代码:
Runtime
.getRuntime().availableProcessors();
手动设置ForkJoin线程池大小
String FORK_JOIN_POOL_PARALLELISM
= "java.util.concurrent.ForkJoinPool.common.parallelism";
System
.setProperty(FORK_JOIN_POOL_PARALLELISM
, "20");
PS:在JDK源码中,ForkJoinPool.java下makeCommonPool()方法中可找到该属性配置