高级的迭代器 流水线式处理思想
在业务体代码中进行循环迭代
一般一个参数的是无状态操作,两个参数的有状态操作
类型相关方法描述无状态操作map/mapToXxx类型转化无状态操作flatMap/flatMapToXxx获取A对象里的B属性的集合无状态操作filter条件过滤无状态操作peek入参是消费者,用于debug无状态操作unordered有状态操作distinct有状态操作sorted有状态操作limit/skip用于无限流在流操作中使用parallel使得当前操作变为并行,使用sequential产生串行流,但同次流操作只认最后的设置。
并行流使用的线程池是jdk自带的ForkJoinPool.commonPool,默认的线程数是当前机器的cpu个数。使用属性设置可以修改默认线程数:
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","10")尽量使用方法引用,能够提高效率,因为方法引用不会再生成一个lambda$0这样的函数
List<String> list = Arrays.asList("1","2","12312","123"); // 获取列表 list.stream().map(String::length).collect(Collectors.toList()); // 统计汇总信息 IntSummaryStatistics collect = list.stream().collect(Collectors.summarizingInt(String::length)); System.out.println(collect); // 分块 Map<Boolean, List<String>> collect1 = list.stream().collect(Collectors.partitioningBy(s -> s.length() > 2)); System.out.println(collect1); // 分组 Map<Integer, List<String>> collect2 = list.stream().collect(Collectors.groupingBy(String::length)); System.out.println(collect2); // 分组再收集 Map<Integer, Long> collect3 = list.stream().collect(Collectors.groupingBy(String::length, Collectors.counting())); System.out.println(collect3);