我想在指定年份之间的某一季度做一次笛卡尔产品。
年(2105年,2016年)应返回季度(2015年,Q1),季度(2015年,Q2)第四季度(2016年,Q4)
表示四分之一的枚举将是
public enum Quarters {
Q1, Q2, Q3, Q4
}我试图想出的代码被卡住了
IntStream.rangeClosed(this.getYear(), to.getYear())
.boxed()
.map(i -> Arrays
.stream(Quarters.values())
.map(q -> new Quarter(i, q))
);上面的代码返回Stream<Stream<Quarter>>,我需要将它压平给Stream<Quarter>,任何帮助都是非常感激的。
发布于 2016-10-31 09:43:52
flatMap( i -> i)本质上将连接流。
发布于 2016-10-31 09:42:26
您可以使用flatMap将Stream<Stream<Quarter>>压平为Stream<Quarter>:
IntStream.rangeClosed(this.getYear(), to.getYear())
.boxed()
.map(i -> Arrays
.stream(Quarters.values())
.map(q -> new Quarter(i, q))
.flatMap(Function.identity())
);flatMap的主体只是一个标识函数。
或者,正如Alexis所建议的,您可以直接使用flatMap而不是map:
IntStream.rangeClosed(this.getYear(), to.getYear())
.boxed()
.flatMap(i -> Arrays
.stream(Quarters.values())
.map(q -> new Quarter(i, q))
);https://stackoverflow.com/questions/40339653
复制相似问题