@Test
public void collectTest() {
IntStream range = IntStream.range(1, 20000);// 产生范围内的int流
DoubleStream dStream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)// 创建流
.mapToDouble(value -> value + 5); // 对每个元素进行映射操作
/* 操作流 lazy/eager */
LinkedList<Double> collect = Stream.of(// 形成嵌套集合
range.boxed(), // 显式包装
dStream.boxed() // 基本类型流有类型转换问题(集合类不支持基本类型)
)
.flatMap(baseStream -> baseStream)// 降维(平展化) --合并
.filter(o -> o.intValue() % 2 == 0) // 过滤器
.sorted(Comparator.comparingInt(Number::intValue)) // 排序
.collect(// 收集器(流转换为集合)
LinkedList::new,// 集合实体
(acc, t) -> { // 处理(集合实体,迭代值) filter
if (t.doubleValue() > 5)
acc.add(t.doubleValue() - 9);
},
LinkedList::addAll // 各线程集合合并策略
);// 并行处理流对应收集器(三参在并行处理时用于合并集合)
// 打印集合
collect.forEach(System.out::println);//迭代
String reduce = collect.stream().reduce("", (s, aDouble) -> s + ", " + aDouble, String::join); //规约 参数同上collect
System.out.println(reduce);
}
参考文章
Java 8系列之Stream的基本语法详解
Java 8 Stream | 菜鸟教程
Java8中的Stream API基本用法总结
Java 8 中的 Streams API 详解
Java 8 | Stream 常用函数接口
Java8之Stream流(一)基础体验系列
Java8 Stream使用flatMap合并List集合运算
Java8学习记录(三)-强大的collect操作
手把手教你使用 Java 8 Stream 收集器
Java8(3)Stream类的collectreduce
方法详解
Java8(2)Stream类【四种最基本的函数式接口、使用Stream类进行流操作】
Java 8系列之Stream中万能的reduce
Java8新特性学习-Stream的Reduce及Collect方法详解
Java 8 新语法习惯 (for 循环的函数替代方案
)
可选类型里的Map和FlatMap有多强大
Java8 中Stream forEach 与 foreEachOrdered 的区别
Java8之Stream流(四)并行流
深入浅出parallelStream陷阱
【小家java】java8新特性之—Stream API 详解 (Map-reduce、Collectors收集器、并行流、groupby多字段分组)超详细 java各版本特性
Java 8的新特性—终极版