我正在编写一段代码,它从一个文件中选取多个API调用细节,并逐个执行这些细节,然后在ArrayList中提供响应数据。下面是我当前的代码。
ArrayList<APICallDetails> apiCallDetailsArray = new ArrayList<>();
APICallDetails apiCallDetails = new APICallDetails();
for (count= 1; count <= callsCount; count++){
try{
apiCallDetails = new APICallDetails();
apiCallDetails.setName(property.getPropertyReader(callName+"_"+count+"_Name", propsFile));
apiCallDetails.setHost(marketConfigs.getRawJson().get(property.getPropertyReader(callName+"_"+count+"_Host", propsFile)).toString().replaceAll("\"", ""));
apiCallDetails.setPath(property.getPropertyReader(callName+"_"+count+"_Path", propsFile));
apiCallDetails.setMethod(property.getPropertyReader(callName+"_"+count+"_Method", propsFile));
apiCallDetails.setBody(property.getPropertyReader(callName+"_"+count+"_Body", propsFile));
apiCallDetails = sendAPIRequest.mwRequestWithoutBody(apiCallDetails, marketConfigs);
BufferedWriter out = null;
try {
out = new BufferedWriter ( new FileWriter ( "C:\\file"+count+".html"));
out.write("something");
out.close();
} catch (IOException e) {
e.printStackTrace();
logger.error(new Date()+" - Error in "+getClass()+".apiCallRequester() flow: "+e.toString());
}
apiCallDetailsArray.add(apiCallDetails);
}catch(NullPointerException e){
e.printStackTrace();
logger.error(new Date()+" - Error in "+getClass()+".apiCallRequester() flow: "+e.toString());
}
}
因为有更多的API调用,所以这是所有调用的响应时间的总和。我希望这些调用并行运行,并将响应数据存储在ArrayList中,以便进一步使用。我是Java新手,有人能帮我一下吗?
发布于 2019-05-23 08:03:01
您可以使用并行流。下面的调用将并行调用createAPICallDetails(idx)
并将它们的返回对象添加到List
中
List<APICallDetails> result = IntStream.range(0, callsCount)
.parallel()
.mapToObj(idx -> createAPICallDetails(idx))
.collect(Collectors.toList());
因此,留给您的唯一一件事就是实现以下逻辑:
APICallDetails createAPICallDetails(int index) { ... }
在给定index
参数的情况下创建APICallDetails
的单个对象,以便可以在前面的lambda中使用它。
希望这能有所帮助。
https://stackoverflow.com/questions/56266299
复制相似问题