【发布时间】:2020-02-24 16:44:02
【问题描述】:
我开始在 java 8 中使用流,我想做一些感觉应该是可能的,但不知何故似乎无法完成的事情。
我必须从我的服务调用外部服务,该服务最多可以处理 500 个唯一 ID 和给定时间。我的服务可以在给定时间接收任意数量的此类信息。
我正在寻找一种简短而精确的方法来将传入的 id 列表拆分为 500 的大小,调用外部服务并在返回结果之前合并它们(如果我们可以并行执行此操作,则奖励)
private List<ServiceReply> makeServiceCallByBatch(List<Long> ids,AuthToken authToken){
//make external call and get reply
}
public List<ServiceReply> makeServiceCall(List<Long> ids,AuthToken authToken){
private int BATCH_SIZE = 500;
if(ids.size() > BATCH_SIZE){
//split by batch and process each batch and merge it all
} else{
return makeServiceCallByBatch(ids,authToken)
}
}
【问题讨论】:
-
您是否考虑过使用
subList视图并执行操作?乍一看不太确定,“全部合并” 是什么意思!您可能希望在您的服务实现中使用batchCall以使其更干净。 -
根据我对流的了解,可能是它的收集功能。让我们说有 1400 个 id。分3批500,500,400处理,合并所有1400的回复后再发回。
-
那么你是不是很喜欢
(0,500),(500,1000),(1000,1400)?看到那里的模式来拆分列表?为这些视图调用您的服务可能只会返回特定结果,然后您可以在开始处理之前将addAll初始化为空的List<ServiceReply>。 -
确实如此。那里有几件事。 1)这是这样做的基本方法。 2)我认为这可能是使用流和并行化外部调用的好地方。完全披露我没有充分利用流,可能会过度设计它
标签: java java-8 java-stream