Stream
2024/9/6原创大约 1 分钟约 394 字
1. Java 并行流
相关信息
流可以是顺序的或并行的。
顺序流上的操作由一个线程串行处理。
使用多个线程并行处理并行流上的操作。
默认情况下,Streams API 中的大多数方法都会生成顺序流。要从集合(如列表或集合)创建并行流,调用 Collection 接口的 parallelStream() 方法。
对流使用 parallel() 方法将顺序流转换为并行流。
对流使用 sequential() 方法将并行流转换为顺序流。
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "12");
2. 计算
2.1. list->map 求合
List<Map<String,Integer>> list=new ArrayList<>();
for (int i = 3; i > 0; i--) {
Map<String, Integer> empty = MapUtil.of("id",4);
empty.put("id",i);
// empty.put("name",i*2);
list.add(empty);
}
System.out.println(list.parallelStream().reduce(0, (a, b) -> a + b.get("id"), Integer::sum));
3. list转map对象
Map<String, String> collect = list.stream().collect(
Collectors.toMap(persion::getId, persion::getName,(e,r)->e));
System.out.println(collect);
3.1. list转tree树
public void test123() {
List<persion> list=new ArrayList<>();
list.add(new persion(){{
setId(1);
setParend(0);
setName("张三");
}});
list.add(new persion(){{
setId(2);
setName("张三1");
setParend(1);
}});
list.add(new persion(){{
setId(3);
setName("张三11");
setParend(2);
}});
// System.out.println(list.stream().map(x->x.getName()).distinct().collect(Collectors.toList()));
// Map<String, String> collect = list.stream().collect(
// Collectors.toMap(persion::getId, persion::getName,(e,r)->e));
// System.out.println(collect);
System.out.println(JSONUtil.toJsonStr(streamToTree(list,0)));
}
public static List<persion> streamToTree(List<persion> treeList, Integer parentId) {
return treeList.stream()
// 过滤父节点
.filter(parent -> Objects.equals(parent.getParend(), parentId))
// 把父节点children递归赋值成为子节点
.peek(child -> child.setChild(streamToTree(treeList,child.getId()))).collect(Collectors.toList());
}
@Data
public class persion{
private Integer id;
private String name;
private Integer parend;
private List<persion> child;
}