加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 子请求的CompletableFuture

发布时间:2020-12-15 01:09:32 所属栏目:Java 来源:网络整理
导读:我试图理解Java 8中的CompletableFuture.作为其中的一部分,我正在尝试进行一些REST调用以巩固我的理解.我正在使用这个库来进行REST调用:https://github.com/AsyncHttpClient/async-http-client. 请注意,此库返回GET调用的Response对象. 以下是我要做的事情

我试图理解Java 8中的CompletableFuture.作为其中的一部分,我正在尝试进行一些REST调用以巩固我的理解.我正在使用这个库来进行REST调用:https://github.com/AsyncHttpClient/async-http-client.

请注意,此库返回GET调用的Response对象.

以下是我要做的事情:

>调用此URL,该URL提供用户列表:https://jsonplaceholder.typicode.com/users
>使用GSON将响应转换为用户对象列表.
>迭代列表中的每个User对象,获取userID,然后从以下URL获取用户发布的帖子列表:https://jsonplaceholder.typicode.com/posts?userId=1
>使用GSON将每个帖子回复转换为Post对象.
>构建UserPost对象的集合,每个对象都有一个用户对象和用户发布的帖子列表.

public class UserPosts {

private final User user;
private final List

}

我目前实现如下:

package com.CompletableFuture;

import java.util.List;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;
import java.util.function.Function;
import java.util.stream.Collectors;

import org.asynchttpclient.Response;

import com.http.HttpResponse;
import com.http.HttpUtil;
import com.model.Post;
import com.model.User;
import com.model.UserPosts;

/**
 * Created by vm on 8/20/18.
 */

class UserPostResponse {
    private final User user;
    private final Future

但是,我不确定我这样做的方式是否正确.更具体地说,在userResponseToObject和postResponseToObject函数中,我调用Future上的get()方法,它将被阻塞.

有没有更好的方法来实现这个?

最佳答案
如果您打算使用CompletableFuture,则应使用async-http-client库中的ListenableFuture. ListenableFuture可以转换为CompletableFuture.

使用CompletableFuture的优点是您可以编写处理Response对象的逻辑,而无需了解有关期货或线程的任何信息.假设您编写了以下4种方法. 2发出请求,2发表解析:

ListenableFuture

现在我们可以编写一个非阻塞方法来检索给定用户的帖子:

CompletableFuture

和阻止方法来读取所有用户的所有帖子:

List

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读