java - 将流中的对收集到另一个对象中
问题描述
我有一个 Java 流 ->Stream.of(LocalDate1, LocalDate2, LocalDate3....)
我希望将其组合成一个对象流,每个对象需要 2 个连续日期,例如,我需要创建
Stream.of(Object1(LocalDate1, LocalDate2),
Object2(LocalDate2, LocalDate3))
等等。
任何人都可以帮忙吗?
谢谢!
我也可以接受 Reactor Mono/Flux 的想法。
解决方案
使用流,您可以执行以下操作;
@Test
void testStream() {
class DoubleDateObject {
LocalDate d1;
LocalDate d2;
public DoubleDateObject(LocalDate d1, LocalDate d2) {
this.d1 = d1;
this.d2 = d2;
}
@Override
public String toString() {
return "DoubleDateObject{" +
"d1=" + d1 +
", d2=" + d2 +
'}';
}
}
LocalDate[] dates = {LocalDate.now(), LocalDate.now(), LocalDate.now(), LocalDate.now()};
List<DoubleDateObject> ret = IntStream.range(0, dates.length)
.filter(i -> i % 2 == 1)
.mapToObj(i -> new DoubleDateObject(dates[i - 1], dates[i]))
.collect(Collectors.toList());
System.out.println(ret);
}
输出将是;
[DoubleDateObject{d1=2021-09-03, d2=2021-09-03}, DoubleDateObject{d1=2021-09-03, d2=2021-09-03}]
使用通量,您可以使用以下内容,它会产生相同的结果;
List<DoubleDateObject> ret = Flux.range(0, dates.length)
.filter(i -> i % 2 == 1)
.map(i -> new DoubleDateObject(dates[i - 1], dates[i]))
.collectList().block();
如果您一开始没有数组,那么您可以执行以下操作,再次产生相同的输出;(将 Arrays.stream(dates) 替换为您的流)
final LocalDate[] tmp = {null};
List<DoubleDateObject> ret = Arrays.stream(dates)
.peek(date -> {
if (tmp[0] == null) tmp[0] = date;
else tmp[0] = null;
})
.filter(date -> tmp[0] == null)
.map(date -> new DoubleDateObject(tmp[0], date))
.collect(Collectors.toList());
推荐阅读
- matlab - 如何使用“fprintf”在 txt 文件中显示输出并将其保存而不是 Matlab 中的命令窗口?
- javascript - 如何在 Next.js 中获取 _app.js 的状态?
- kubernetes - 如何在“多容器 pod”的容器上执行“带参数的命令”?
- firebase - 是否可以从 Firebase 存储提供 Brotli 压缩文件?
- ansible - 安装的 WinRM 版本不支持传输 [u'']
- python - 在显示视频时保持代码运行
- ios - 根据部分更改 UICollectionView 布局
- python - Python:在不指定值的情况下启动整数
- python - 基于两个数据框列构建计数字典
- amazon-web-services - 向 ECS 服务添加标签 - InvalidParameterException