gpt4 book ai didi

java - 使用来自 flux 的数据将 flux 减少为单声道

转载 作者:行者123 更新时间:2023-12-05 06:08:47 26 4
gpt4 key购买 nike

我有这种情况。我有一个分页 API,它为我提供了过去 12 个月的数据。 API 的响应如下:

public class PagedTransfersDto {

private List<Transfer> content;

private Page page;

@Getter
public static class Transfer {
private String id;
private Long transferId;
private Long transferRequestId;
private String status;
private BigDecimal accountReceivable;
private BigDecimal accountPayable;
private BigDecimal netReceivable;
private BigDecimal netPayable;
private String currency;
private Long transferDate;
}

@Getter
public static class Page {
private Integer size;
private Integer number;
private Integer totalElements;
private Integer totalPages;
}
}

现在我必须收集所有数据,然后计算所有 netReceivable 的总和并以 Mono<CompanyIncome> 的形式返回.这个 pojo 就像

public class CompanyIncome {
private BigDecimal inferredIncome = new BigDecimal(0);
}

为此我写了类似的东西:

CompanyIncome initialIncome = new CompanyIncome();
return myService.getTransfers(0, 50, fromDate, toDate)
.expand(pagedTransfersDto -> {
if (pagedTransfersDto.getPage().getNumber().equals(pagedTransfersDto.getPage().getTotalPages())) {
return Mono.empty();
}
return myService.getTransfers(pagedTransfersDto.getPage().getNumber() + 1, 50, fromDate, toDate);
})
.flatMap(pagedTransfersDto -> Flux.fromIterable(pagedTransfersDto.getContent()))
.reduce(initialIncome, ((companyIncome, transfer) -> {
companyIncome.setInferredIncome(companyIncome.getInferredIncome().add(transfer.getNetReceivable()));
return companyIncome;
}));

现在要注意的是,此数据可能只有 3 个月,在这种情况下,我必须通过乘以 4 将其推断为 12 个月。

我想的是获取转账列表的第一项和最后一项,看看数据是否不是整年的,但想不出执行此操作的地方。

因为减少传输数据后就没有了。在此之前,我似乎无法找到一种方法来获取此信息并仍然减少传输通量

我对 react 方式有点陌生,似乎无法找到一种方法来做到这一点。任何帮助将不胜感激。谢谢

最佳答案

为此,最好的解决方案是在简化的对象中存储必要的“元数据”。您已经有一个 CompanyIncome 对象,所以也许这是个好地方?否则,我会引入 Tuple2 或一些中间业务对象(例如 CompanyIncomeAggregator),在其中存储汇总收入和您需要在如果需要进一步处理则结束。

然后在 map 步骤中,您将读取该信息,对其进行操作,然后按原样返回计算的收入或根据您的标准进行修改。

重要说明:使用 react 链外部的变量是一种代码味道,因为它引入了泄漏的共享状态:如果对同一个 Mono 进行了两个订阅,它们将在同一个 CompanyIncome 上工作目的。您可以在此处使用 reduceWith 进行补救,它采用 Supplier 作为初始值:reduceWith(CompanyIncome::new, ...)

关于java - 使用来自 flux 的数据将 flux 减少为单声道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65025058/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com