Som*_*kar 4 java java-8 java-stream
我想在指定年份之间的一年中在 Quarter 上做一个笛卡尔积
Year(2105, 2016) 应该返回 Quarter(2015, Q1), Quarter(2015, Q2)... Quarter(2016, Q4)
代表季度的枚举将是
public enum Quarters {
Q1, Q2, Q3, Q4
}
Run Code Online (Sandbox Code Playgroud)
我试图想出的代码卡在下面
IntStream.rangeClosed(this.getYear(), to.getYear())
.boxed()
.map(i -> Arrays
.stream(Quarters.values())
.map(q -> new Quarter(i, q))
);
Run Code Online (Sandbox Code Playgroud)
上面的代码返回Stream<Stream<Quarter>>,我需要扁平化为Stream<Quarter>任何帮助表示赞赏。
您可以使用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())
);
Run Code Online (Sandbox Code Playgroud)
的主体flatMap只是一个身份函数。
或者,正如亚历克西斯建议的那样,您可以直接使用flatMap代替map:
IntStream.rangeClosed(this.getYear(), to.getYear())
.boxed()
.flatMap(i -> Arrays
.stream(Quarters.values())
.map(q -> new Quarter(i, q))
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4249 次 |
| 最近记录: |