是否可以使用 Java Stream api 重写具有 Rest-Assured 请求尝试的 WHILE 循环

Is it possible to rewrite WHILE loop with Rest-Assured requests attempts using Java Stream api

我有一个通过 Rest-assured 发送请求的方法,如果响应不满足条件(响应状态代码为 200),它会进行多次尝试,除非我得到 200 作为响应状态代码

protected Response getResponseWithRetries(Map<String, Object> requestBody, String token, String url) {
    Response response = null;
    int statusCode = HttpStatus.SC_BAD_GATEWAY;
    int count = 0;
    while (statusCode != HttpStatus.SC_OK && count < 3) {
        response = getResponse(requestBody, token, url);
        statusCode = response.getStatusCode();
        count++;
        sleep(5000);
    }
    return response;
}

但是可以用 Stream api 重写这个循环吗?如果我可以将它应用到我的案例中,我正在努力理解。首先,我没有要流式传输的响应集合。但我也不想提出几个构建它的请求(例如,当它们都成功时)

您可以使用 IntStream.range 替换条件的 count 部分,然后过滤 http 状态代码的响应和 return 第一次出现 findFirst .

Optional<Response> response = IntStream.range(0, 3)
    .mapToObj(i -> getResponse(requestBody, token, url))
    .filter(r -> r.getStatusCode() == HttpStatus.SC_OK)
    .findFirst();
return response.orElse(null);

如果您可能 return null 而不是响应,则将 return 类型更改为 Optional<Response>.

是有意义的

如果你想得到最后的响应,即使它失败了,你可以做 2 次迭代,然后使用 Optional.orElseGet 做最后的 getResponse 调用,如果没有积极的状态代码是 return 在 2 次迭代中编辑。

Optional<Response> response = IntStream.range(0, 2)
    .mapToObj(i -> getResponse(requestBody, token, url))
    .filter(r -> r.getStatusCode() == HttpStatus.SC_OK)
    .findFirst();
return response.orElseGet(() -> getResponse(requestBody, token, url));